home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / tools / condrv / cond_e12.lzh / src / condrv.s < prev    next >
Encoding:
Text File  |  1998-07-24  |  131.9 KB  |  6,841 lines

  1.  
  2.     .title    Console driver v1.09c+12 / (C)1990 ö┌ûφî─üÖ, 1998/07/24 ùºë╘éªéΦÄq.
  3.  
  4.  
  5. VERSION:    .reg    '1.09c+12'
  6. VERSION_ID:    .equ    'e12 '
  7. DATE:        .reg    '1998/07/24'
  8. AUTHOR:        .reg    'ùºë╘éªéΦÄq'
  9.  
  10.  
  11. # symbols
  12. # __XCONC    XCONC âfâoâCâXé≡Ägùpé╖éΘ
  13. # __EMACS    EMACS îné╠âLü[æÇì∞é╔é╖éΘ
  14. # __EM_FONT_TAB    â^âué╠âtâHâôâgé≡ MicroEMACS é╞ô»é╢éαé╠é╔é╖éΘ
  15. # __EM_FONT_CR    ëⁿìsé╠âtâHâôâgüV
  16. # __EM_FONT    æSé─é╠âtâHâôâg(î╗ì▌é═â^âuüAëⁿìs)é≡ MicroEMACS é╞ô»é╢éαé╠é╔é╖éΘ
  17. # __UPPER    16 ÉiÉöé╠ aü`f é≡æσò╢ÄÜé╔é╖éΘ
  18. # __BUF_POS    buffer-position(C-x =)é≡ùLî°é╔é╖éΘ
  19.  
  20. # __EOBCUR    âJü[â\âïé¬âoâbâtâ@ûûö÷é╠ò╢ÄÜé╠ăé▄é┼ê┌ô«é╖éΘ
  21.   __EOBCUR:    .equ    1
  22.  
  23.     .ifdef    __EM_FONT
  24.         .ifndef    __EM_FONT_TAB
  25.             __EM_FONT_TAB:    .equ    1
  26.         .endif
  27.         .ifndef    __EM_FONT_CR
  28.             __EM_FONT_CR:    .equ    1
  29.         .endif
  30.     .endif
  31.  
  32.  
  33. * Include File -------------------------------- *
  34.  
  35.         .include    dos.mac
  36.         .include    macro.mac
  37.         .include    console.mac
  38.         .include    doscall.mac
  39.         .include    keycode.mac
  40.         .include    iocscall.mac
  41.         .include    gm_internal.mac
  42.  
  43.  
  44. * Fixed Number -------------------------------- *
  45.  
  46. WIDTH:        .equ    96
  47. GETSMAX:    .equ    69            ò╢ÄÜù±ôⁿù═é╠ì┼æσâoâCâgÉö(è∩Éö)
  48.         .fail    (GETSMAX.and.1).eq.0
  49. RL_PASTBUF:    .equ    general_work+GETSMAX+3    C-^,\ ùpé╠âyü[âXâgâoâbâtâ@
  50. KBbuf_Default:    .equ    1024
  51. BLINKCYCLE:    .equ    50
  52. TEXTSAVESIZE:    .equ    128*16*2        îà*âëâCâô*û╩
  53. IOBUFSIZE:    .equ    TEXTSAVESIZE
  54.  
  55. ;ctype_table
  56. IS_MULTIBYTE:    .equ    %1000_0000
  57. IS_HEXNUMBER:    .equ    %0100_0000
  58. IS_DECIMAL:    .equ    %0010_0000
  59. IS_MB_bit:    .equ    7
  60. IS_HEX_bit:    .equ    6
  61. IS_DEC_bit:    .equ    5
  62.  
  63. CTRL:        .equ    -$40
  64.  
  65.  
  66. * Instruction Code ---------------------------- *
  67.  
  68. RTS:        .equ    $4e75
  69. MOVEM:        .equ    $48e7
  70.  
  71.  
  72. * I/O Address --------------------------------- *
  73.  
  74. TIMERA_VEC:    .equ    $134
  75. CIRQ_VEC:    .equ    $138
  76.  
  77. TEXT_VRAM:    .equ    $e00000
  78.  
  79. CRTC_R21:    .equ    $e8002a
  80. CRTC_R22:    .equ    $e8002c
  81. CRTC_MODE:    .equ    $e80480
  82. TEXTPAL:    .equ    $e82200
  83.  
  84. MFP_GPIP:    .equ    $e88001
  85. MFP_DDR:    .equ    $e88005
  86.  
  87.  
  88. * IOCS Work ----------------------------------- *
  89.  
  90. KEYSTAT:    .equ    $800
  91. LEDSTAT:    .equ    $810
  92. SFTSTAT:    .equ    $811
  93. KBUFNUM:    .equ    $812
  94. CSRSWITCH:    .equ    $992
  95. TXADR:        .equ    $944
  96. TXSTOFST:    .equ    $948
  97. CSRXMAX:    .equ    $970
  98. CSRX:        .equ    $974
  99. FIRSTBYTE:    .equ    $990
  100. TXCOLOR:    .equ    $994
  101. TXUSEMD:    .equ    $9dd
  102. SKEYMOD:    .equ    $bc1
  103. MPUTYPE:    .equ    $cbc
  104.  
  105.  
  106. * Macro --------------------------------------- *
  107.  
  108. TopChk:        .macro    areg            ;æOé╔û▀é╡é╜ÅΩìç
  109.         .local    skip
  110.         cmpa.l    (buffer_top,a6),areg
  111.         bcc    skip
  112.         adda.l    (buffer_size,pc),areg
  113. skip:
  114.         .endm
  115.  
  116. EndChk:        .macro    areg            ;1byteÉié▀é╜ÅΩìç
  117.         .local    skip
  118.         cmpa.l    (buffer_end,a6),areg
  119.         bcs    skip
  120.         movea.l    (buffer_top,a6),areg    ;é┐éσé┴é╞é╛é»æ¼éó
  121. skip:
  122.         .endm
  123. EndChk2:    .macro    areg            ;òíÉöbyteÉié▀é╜ÅΩìç
  124.         .local    skip
  125.         cmpa.l    (buffer_end,a6),areg
  126.         bcs    skip
  127.         suba.l    (buffer_size,pc),areg
  128. skip:
  129.         .endm
  130.  
  131. GMcall:        .macro    callno
  132.         moveq    #.low.callno,d1
  133.         bsr    gm_tgusemd
  134.         .endm
  135.  
  136. KEYbtst:    .macro    keyname
  137.         btst    #keyname.and.%111,(KEYSTAT+keyname.shr.3)
  138.         .endm
  139. LEDbtst:    .macro    keybit
  140.         btst    #keybit,(LEDSTAT)
  141.         .endm
  142. SFTbtst:    .macro    keybit
  143.         btst    #keybit,(SFTSTAT)
  144.         .endm
  145.  
  146. DB_PUTC:    .macro    char
  147.         PUSH    d0-d1/a0
  148.         moveq    #char,d1
  149. *        IOCS    _B_PUTC
  150.         movea.l    (b_putc_orig,pc),a0
  151.         jsr    (a0)
  152.         POP    d0-d1/a0
  153.         .endm
  154.  
  155.  
  156. * Offset Table -------------------------------- *
  157.  
  158. bufstruct_size:    .equ    32
  159.         .offset    -4
  160. buffer_id:    .dc.l    1            'hmk*'
  161. buffer_top:    .ds.l    1            âoâbâtâ@ɵô¬âAâhâîâX
  162. buffer_old:    .ds.l    1            âèâôâOâoâbâtâ@é╠êΩö╘î├éóâfü[â^é╠âAâhâîâX
  163. buffer_now:    .ds.l    1            î╗ì▌é╠ìsé╠ɵô¬
  164. buffer_write:    .ds.l    1            Åæé½ì₧é▌â|âCâôâ^
  165. buffer_end:    .ds.l    1            âoâbâtâ@ûûö÷â|âCâôâ^
  166.         .ds.l    2            ûóÄgùp(0)
  167.         .fail    $.ne.(bufstruct_size-4)
  168.  
  169.         .offset    0            âfâoâCâXâhâëâCâoôⁿÅoù═é╠âèâNâGâXâgâwâbâ_
  170.         .ds.b    1
  171.         .ds.b    1
  172. DEVIO_COMMAND:    .ds.b    1
  173. DEVIO_ERR_LOW:    .ds.b    1
  174. DEVIO_ERR_HIGH:    .ds.b    1
  175.         .ds.b    8
  176. DEVIO_DATABUF:    .ds.b    1
  177. DEVIO_ENDADR:
  178. DEVIO_ADDRESS:    .ds.l    1
  179. DEVIO_ARGUMENT:
  180. DEVIO_LENGTH:    .ds.l    1
  181.         .ds.l    1
  182. REQHEAD_SIZE:
  183.         .fail    REQHEAD_SIZE.ne.26
  184.  
  185.  
  186. * Text Section -------------------------------- *
  187.  
  188.         .cpu    68000
  189.  
  190.         .text
  191.         .even
  192.  
  193.  
  194. * Device Driver Interface --------------------- *
  195.  
  196. usereg:        .reg    d0-d1/a4-a5
  197.  
  198. top_:
  199.         .ifdef    __XCONC
  200.             .dc.l    xconc_header
  201.         .else
  202.             .dc.l    -1
  203.         .endif
  204.         .dc    $8020
  205.         .dc.l    xcon_request
  206.         .dc.l    xcon_interrupt
  207.             *01234567
  208.         .dc.l    'XCON    '
  209.  
  210.         .ifdef    __XCONC
  211. xconc_header:    .dc.l    -1
  212.         .dc    $8000
  213.         .dc.l    xconc_request
  214.         .dc.l    xconc_interrupt
  215.             *01234567
  216.         .dc.l    'XCONC   '
  217.  
  218. xconc_request:
  219.         move.l    a5,(xconc_req_adr)
  220.         rts
  221. xconc_interrupt:
  222.         PUSH    usereg
  223.         movea.l    (xconc_req_adr,pc),a5
  224.         bra    @f
  225.         .endif
  226.  
  227. xcon_request:
  228.         move.l    a5,(xcon_req_adr)
  229.         rts
  230. xcon_interrupt:
  231.         PUSH    usereg
  232.         movea.l    (xcon_req_adr,pc),a5
  233. @@:
  234.         moveq    #0,d1
  235.         move.b    (DEVIO_COMMAND,a5),d1
  236.         add    d1,d1
  237.         moveq    #0,d0
  238.         move    (@f,pc,d1.w),d1
  239.         jsr    (@f,pc,d1.w)
  240.  
  241.         addq.l    #DEVIO_ERR_LOW,a5
  242.         move.b    d0,(a5)+        * DEVIO_ERR_LOW
  243.         move    d0,-(sp)
  244.         move.b    (sp)+,(a5)        * DEVIO_ERR_HIGH
  245.  
  246.         POP    usereg
  247.         rts
  248.  
  249. @@:        .dc    xcon_init-@b         0üFÅëè·ë╗
  250.         .dc    xcon_commanderr-@b     1üFâGâëü[
  251.         .dc    xcon_commanderr-@b     2üFûóÄgùp
  252.         .dc    xcon_commanderr-@b     3üFIOCTRL é╔éµéΘôⁿù═
  253.         .dc    xcon_datinp-@b         4üFôⁿù═
  254.         .dc    xcon_datsns-@b         5üFɵô╟é▌ôⁿù═
  255.         .dc    xcon_inpchk-@b         6üFôⁿù═âXâeü[â^âXâ`âFâbâN
  256.         .dc    xcon_commanderr-@b     7üFôⁿù═âoâbâtâ@é≡âNâèâA
  257.         .dc    xcon_output-@b         8üFÅoù═
  258.         .dc    xcon_output-@b         9üFÅoù═(Verify)
  259.         .dc    xcon_ok-@b        10üFÅoù═âXâeü[â^âXâ`âFâbâN
  260.         .dc    xcon_commanderr-@b    11üFûóÄgùp
  261.         .dc    xcon_commanderr-@b    12üFIOCTRL é╔éµéΘÅoù═
  262.  
  263. xcon_datsns:
  264.         move.b    d0,(DEVIO_DATABUF,a5)    âfü[â^é¬ôⁿé┴é─é½é─é╚éó
  265.         rts
  266.  
  267. xcon_inpchk:
  268.         moveq    #1,d0            Åφé╔ôⁿù═òsë┬
  269.         rts
  270.  
  271. xcon_datinp:
  272.         move.l    (DEVIO_LENGTH,a5),d0
  273.         beq    xcon_ok
  274.         movea.l    (DEVIO_ADDRESS,a5),a4
  275. @@:
  276.         clr.b    (a4)+
  277.         subq.l    #1,d0
  278.         bne    @b
  279. xcon_ok:
  280. *        moveq    #0,d0
  281.         rts
  282. xcon_commanderr:
  283.         move    #$5003,d0        ;âRâ}âôâhâRü[âhé¬òsÉ│
  284.         rts
  285.  
  286. * XCON é╓é╠Åoù═
  287. xcon_output:
  288. usereg:        .reg    d1-d2/a0-a3
  289.         PUSH    usereg
  290.         moveq    #0,d0            ;ESCâtâëâO/ò╘Æl
  291.  
  292.         move.l    (DEVIO_LENGTH,a5),d2
  293.         beq    xcon_output_return
  294.         subq.l    #1,d2
  295.  
  296.         movea.l    (DEVIO_ADDRESS,a5),a0
  297.         lea    (xcon_output_hb,pc),a1
  298.         lea    (ctype_table,pc),a2
  299.  
  300.         lea    (condrv_put_char_force,pc),a3
  301. *        cmpi    #RTS,(a3)
  302. *        sne    -(sp)
  303. *        bne    @f
  304. *        bsr    toggle_buffering_mode
  305. *@@:
  306.         move    (a1),d1
  307.         bne    xcon_output_2
  308. xcon_output_loop:
  309.         move.b    (a0)+,d1
  310.         tst.b    (a2,d1.w)
  311.         bmi    xcon_output_1
  312.  
  313. ***        bsr    print_d1
  314.         jsr    (a3)            ;êΩò╢ÄÜÅæé½ì₧é▌
  315.  
  316.         dbra    d2,xcon_output_loop
  317.         bra    xcon_output_next
  318.  
  319. xcon_output_1:
  320.         move.b    d1,(a1)
  321.  
  322.         dbra    d2,@f
  323.         clr    d2
  324.         subq.l    #1,d2
  325.         bcs    xcon_output_end        ;2bytesò╢ÄÜé╠ôrÆåé┼ÅIéφé┴é╜
  326. @@:
  327.         move    (a1),d1
  328. xcon_output_2:
  329.         move.b    (a0)+,d1
  330. ***        bsr    print_d1
  331.         jsr    (a3)            ;êΩò╢ÄÜÅæé½ì₧é▌
  332.         moveq    #0,d1
  333.  
  334.         dbra    d2,xcon_output_loop
  335. xcon_output_next:
  336.         clr    d2
  337.         subq.l    #1,d2
  338.         bcc    xcon_output_loop
  339.  
  340.         move    d0,(a1)
  341. xcon_output_end:
  342. *        tst.b    (sp)+
  343. *        bne    @f
  344. *        bsr    toggle_buffering_mode
  345. *@@:
  346. xcon_output_return:
  347.         POP    usereg
  348.         rts
  349.  
  350.         .if    0
  351. print_d1:
  352.         PUSH    d0-d7/a0-a6
  353.         lea    (print_d1_buf+1,pc),a0
  354.         moveq    #4-1,d0
  355. print_d1_loop:
  356.         rol    #4,d1
  357.         moveq    #$f,d2
  358.         and.b    d1,d2
  359.         addi.b    #'0',d2
  360.         cmpi.b    #'9',d2
  361.         bls    @f
  362.         addi.b    #'a'-('9'+1),d2
  363. @@:
  364.         move.b    d2,(a0)+
  365.         dbra    d0,print_d1_loop
  366.  
  367.         lea    (print_d1_buf,pc),a1
  368.         movea.l    (b_print_orig,pc),a0
  369.         jsr    (a0)
  370.  
  371.         POP    d0-d7/a0-a6
  372.         rts
  373. print_d1_buf:
  374.         .dc.b    '(0000)',0
  375.         .even
  376.  
  377.         .endif
  378.  
  379. * End of Device Driver Interface -------------- *
  380.  
  381. dummy_rte:
  382.         rte
  383.  
  384. * New IOCS Call ------------------------------- *
  385.  
  386. iocs_b_print:
  387. usereg        .reg    d1/a1
  388.         PUSH    usereg
  389.         moveq    #0,d1
  390.         move.b    (a1)+,d1
  391.         beq    @f            ÅIéφéΦ
  392. 1:        bsr    condrv_put_char
  393.         move.b    (a1)+,d1        Äƒé╠êΩò╢ÄÜ
  394.         bne    1b
  395. @@:
  396.         POP    usereg
  397.         move.l    (b_print_orig,pc),-(sp)
  398.         rts
  399.  
  400. iocs_txrascpy:
  401. usereg        .reg    d1-d2/d4/a3
  402.         PUSH    usereg
  403.         lea    (CRTC_R21),a3
  404.         move    (a3),d4
  405.         move    #$010f,d0
  406.         and.b    d3,d0
  407.         move    d0,(a3)
  408.         move    #$0101,d0
  409.         tst    d3
  410.         bpl    @f
  411.         neg    d0            $feff
  412. @@:
  413.         exg    d0,d2
  414.         bsr    txrascpy_sub
  415.         move    d4,(a3)
  416.         POP    usereg
  417. @@:        rts
  418.  
  419. WAIT_HSYNC    .macro
  420.         .local    skip1,skip2
  421. skip1        tst.b    (a0)
  422.         bmi    skip1
  423. skip2        tst.b    (a0)
  424.         bpl    skip2
  425.         .endm
  426.  
  427. * in    a3.l    CRTC_R21($e8002a)
  428.  
  429. txrascpy_sub:
  430.         subq    #1,d0            âëâXâ^âRâsü[
  431.         bmi    @b
  432. usereg        .reg    d4-d6/a0-a2
  433.         PUSH    usereg
  434.  
  435.         lea    (MFP_GPIP-CRTC_R21,a3),a0
  436.         lea    (CRTC_R22-CRTC_R21,a3),a1
  437.         lea    (CRTC_MODE-CRTC_R21,a3),a2
  438.  
  439.         moveq    #8,d4
  440.         clr.b    (MFP_DDR-CRTC_R21,a3)
  441.         bset    #0,(a3)            âeâLâXâgô»Ä₧âAâNâZâX ON
  442.         move    sr,d5
  443.         move    d5,d6
  444.         ori    #$700,d6
  445. txrascpy_loop:
  446.         move    d6,sr            èäéΦì₧é▌ï╓Ä~
  447.         WAIT_HSYNC
  448.  
  449.         move    d1,(a1)            ô]æùâëâXâ^
  450.         move    d4,(a2)            âëâXâ^âRâsü[èJÄn
  451.         move    d5,sr            èäéΦì₧é▌ïûë┬
  452.         add    d2,d1            Äƒé╠âëâXâ^
  453.         dbra    d0,txrascpy_loop
  454.  
  455.         WAIT_HSYNC
  456.         clr    (a2)            âëâXâ^âRâsü[ÆΓÄ~
  457.         bclr    #0,(a3)            âeâLâXâgô»Ä₧âAâNâZâX OFF
  458.         POP    usereg
  459.         rts
  460.  
  461. *condrv_put_char_forceé╠ë║é╔ê┌ô«.
  462. *iocs_b_putc:
  463. *        move.l    (b_putc_orig,pc),-(sp)
  464. *        bra    condrv_put_char
  465.  
  466. * End of New IOCS Call ----------------------- *
  467.  
  468.  
  469. * âoâbâtâ@Åæé½ì₧é▌âïü[â`âô ------------------- *
  470.  
  471. usereg:        .reg    d0-d4/d7/a0-a6
  472.  
  473. d0~column:    .reg    d0
  474. d1~char:    .reg    d1
  475. d2~byte:    .reg    d2
  476. d3~temp:    .reg    d3
  477. d4~temp2:    .reg    d4
  478. *d5~unused:    .reg    d5
  479. *d6~unused2:    .reg    d6
  480. d7~line0:    .reg    d7
  481.  
  482. a0~column:    .reg    a0
  483. a1~top:        .reg    a1
  484. a2~old:        .reg    a2
  485. a3~now:        .reg    a3
  486. a4~write:    .reg    a4
  487. a5~end:        .reg    a5
  488. a6~buf:        .reg    a6
  489.  
  490.  
  491. * Åφé╔Åæé½ì₧é▌ë┬ö\é╚î─é╤Åoé╡âAâhâîâX.
  492. * ESCâVü[âPâôâXìφÅ£é═ûóæ╬ë₧.
  493. condrv_put_char_force:
  494.         PUSH    usereg
  495.         bra    putbuf_not_esc
  496.  
  497. iocs_b_putc:
  498.         move.l    (b_putc_orig,pc),-(sp)
  499.         bra    condrv_put_char
  500.  
  501. condrv_put_char:
  502.         PUSH    usereg
  503. *        rts                ;âoâbâtâ@ĵéΦì₧é▌ÆΓÄ~Æå
  504.  
  505.         move    (stop_level,pc),d3~temp    ;ÉVâoâbâtâ@ÆΓÄ~Åêù¥
  506.         bne    putbuf_cansel
  507.  
  508.         cmpi.b    #ESC,d0
  509.         bne    putbuf_not_esc
  510.         move.b    (option_ne_flag,pc),d3~temp
  511.         bne    putbuf_cansel        ;ESCâVü[âPâôâXÆå
  512. putbuf_not_esc:
  513.         bsr    check_backscroll_buffer
  514.  
  515.         lea    (putbuf_column,pc),a0~column
  516.         movem.l    (buffer_top,a6~buf),a1~top/a2~old/a3~now/a4~write/a5~end
  517.         move.b    (a0~column),d0~column        ;î╗ì▌ìsé╠ÄcéΦîàÉö
  518.         move.b    (a3~now),d2~byte        ;î╗ì▌ìsé╠âoâCâgÉö
  519.         move.l    (line_buf,pc),d7~line0
  520.  
  521.         move    d1~char,-(sp)
  522.         move.b    (sp)+,d3~temp        ;Åπê╩byte
  523.         beq    putbuf_1byte
  524.         cmpi.b    #$f0,d3~temp
  525.         bcc    putbuf_2byte_hankaku
  526.         cmpi.b    #$80,d3~temp
  527.         bne    putbuf_2byte_zenkaku
  528.  
  529. putbuf_2byte_hankaku:
  530.         subq.b    #1,d0~column
  531.         bcc    putbuf_2byte
  532.  
  533.         moveq    #WIDTH-1,d0~column
  534.         bra    @f
  535.  
  536. putbuf_2byte_zenkaku:
  537.         subq.b    #2,d0~column
  538.         bcc    putbuf_2byte
  539.  
  540.         moveq    #WIDTH-2,d0~column
  541. @@:        bsr    make_newline_n
  542. putbuf_2byte:
  543.         move.b    d3~temp,(a4~write)+    ;Åπê╩byte
  544.         bsr    PointerForward
  545.  
  546.         move.b    d1~char,(a4~write)+    ;ë║ê╩byte
  547.         bsr    PointerForward
  548.  
  549.         addq.b    #2,d2~byte
  550.         bra    putbuf_end
  551.  
  552. putbuf_1byte:
  553.         cmpi    #$20,d1~char
  554.         bcs    putbuf_ctrl0~1f        ;$00ü`$1f
  555.         cmpi    #DEL,d1~char
  556.         bne    putbuf_hankaku        ;$20-$7e
  557. ;putbuf_del:
  558.         move.b    (option_nc_flag,pc),d3~temp
  559.         bne    putbuf_cansel
  560. putbuf_bs:
  561. putbuf_esc:
  562. putbuf_ctrl:
  563. putbuf_hankaku:
  564.         subq.b    #1,d0~column
  565.         bcc    @f
  566.  
  567.         moveq    #WIDTH-1,d0~column
  568.         bsr    make_newline_n
  569. @@:
  570.         move.b    d1~char,(a4~write)+
  571.         bsr    PointerForward
  572.  
  573.         addq.b    #1,d2~byte
  574. putbuf_end:
  575.         move.b    d0~column,(a0~column)    ;âoâbâtâ@Åæì₧îàÉö
  576.         .ifdef    __EOBCUR
  577.         bne    @f
  578.         move.b    #WIDTH,(a0~column)
  579.         bsr    make_newline_n
  580. @@:
  581.         .endif
  582.         move.b    d2~byte,(a3~now)    ;âoâbâtâ@Åæì₧âoâCâgÉö
  583.         clr.b    (a4~write)
  584.         .ifdef    __EOBCUR
  585. putbuf_end2:
  586.         .endif
  587.         movem.l    a2~old/a3~now/a4~write,(buffer_old,a6~buf)
  588. putbuf_nul:
  589. putbuf_esc_ne:
  590. putbuf_ctrl_nc:
  591. putbuf_cansel:
  592.         POP    usereg
  593.         move    d1~char,(bufwrite_last)
  594.         rts
  595.  
  596. ;ëⁿìsÅêù¥
  597.  
  598. make_newline:
  599.         moveq    #WIDTH,d0~column
  600. make_newline_n:
  601.         move.b    d2~byte,(a3~now)
  602.         move.b    d2~byte,(a4~write)+
  603.         bsr    PointerForward
  604.  
  605.         moveq    #0,d2~byte
  606.  
  607.         movea.l    a4~write,a3~now
  608.         clr.b    (a4~write)+
  609.         bra    PointerForward
  610.  
  611. PointerForward:
  612.         cmpa.l    a5~end,a4~write
  613.         bne    @f
  614.         movea.l    a1~top,a4~write
  615. @@:
  616.         cmpa.l    a4~write,a2~old
  617.         bne    PointerForward_end
  618.  
  619.         addq.l    #1,a2~old
  620.         cmpa.l    a5~end,a2~old
  621.         bne    @f
  622.         movea.l    a1~top,a2~old
  623. @@:
  624.         cmpa.l    d7~line0,a2~old
  625.         bne    @f
  626.         st    (line_buf-putbuf_column,a0~column)
  627. @@:
  628.         cmpa.l    (mark_line_adr,pc),a2~old
  629.         bne    @f
  630.         clr.l    (mark_char_adr-putbuf_column,a0~column)
  631.         clr.l    (mark_line_adr-putbuf_column,a0~column)
  632. @@:
  633.         moveq    #0,d4~temp2
  634.         move.b    (a2~old)+,d4~temp2
  635.         adda    d4~temp2,a2~old
  636.         cmpa.l    a5~end,a2~old
  637.         bcs    @f
  638.         suba.l    (buffer_size,pc),a2~old
  639. @@:
  640.         clr.b    (a2~old)
  641. PointerForward_end:
  642.         rts
  643.  
  644. ;ɺîΣïLìåé╠Åêù¥
  645.  
  646. putbuf_lf:
  647.         moveq    #CR,d1~char
  648. putbuf_cr:
  649.         cmp    (bufwrite_last,pc),d1~char
  650.         beq    putbuf_cansel        ;æOë±éα CR é╛é┴é╜éτû│Äï
  651.  
  652.         tst.b    d0~column
  653.         bne    @f
  654.  
  655.         bsr    make_newline_n        ;d0Åëè·ë╗é═òsùv
  656. @@:
  657.         move.b    d1~char,(a4~write)+
  658.         bsr    PointerForward
  659.  
  660.         addq.b    #1,d2~byte
  661.  
  662.         bsr    make_newline
  663.         bra    putbuf_end
  664.  
  665. putbuf_tab:
  666.         tst.b    d0~column
  667.         bne    @f
  668.  
  669.         bsr    make_newline
  670. @@:
  671.         move.b    d1~char,(a4~write)+
  672.         bsr    PointerForward
  673.  
  674.         subq.b    #1,d0~column
  675. putbuf_tab_end:
  676.         andi.b    #.not.7,d0~column
  677.         addq.b    #1,d2~byte
  678.         bra    putbuf_end
  679.  
  680. putbuf_tab_nt:
  681.         tst.b    d0~column        ;TAB Åêù¥(-nt)
  682.         bne    @f
  683.  
  684.         bsr    make_newline
  685. @@:
  686.         subq.b    #1,d0~column
  687.         moveq    #%111,d3~temp
  688.         and.b    d0~column,d3~temp
  689.         add.b    d3~temp,d2~byte
  690.  
  691.         moveq    #SPACE,d1~char
  692. putbuf_tab_loop:
  693.         move.b    d1~char,(a4~write)+    ;TABé≡SPACEé╔ò╧è╖
  694.         bsr    PointerForward
  695.         dbra    d3~temp,putbuf_tab_loop
  696.         bra    putbuf_tab_end
  697.  
  698. putbuf_bs_nb:
  699.         subq.b    #1,d2~byte        ;BS Åêù¥(-nb)
  700.         bcs    putbuf_cansel        ;âJü[â\âïé¬ìsé╠ì╢Æ[é╔éáéΘ
  701.  
  702.         addq.b    #1,d0~column        ;1 âoâCâgìφÅ£
  703.         subq.l    #1,a4~write
  704.         TopChk    a4~write
  705.  
  706.         .if    1            ;1 âoâCâgö╝èpò╢ÄÜé≡ BS êΩî┬é┼ìφÅ£é╖éΘ
  707.  
  708. * Æ╝æOé╠ 1 âoâCâg鬠$80üA$f0-$ff é╚éτüAìíìφÅ£é╡é╜
  709. * 1 âoâCâgé╞ìçéφé╣é─ 2 âoâCâgö╝èpò╢ÄÜé╠ë┬ö\ɽé¬éáéΘ.
  710.  
  711.         move.b    d2~byte,-(sp)
  712.         subq.b    #1,d2~byte
  713.         bcs    putbuf_bs_end        ;âJü[â\âïé¬ìsé╠ì╢Æ[é╔éáéΘ
  714.  
  715.         move.l    a4~write,-(sp)
  716.         subq.l    #1,a4~write
  717.         TopChk    a4~write
  718.         cmpi.b    #$80,(a4~write)
  719.         beq    putbuf_bs_check        ;2 âoâCâgö╝èp
  720.         cmpi.b    #$f0,(a4~write)
  721.         bcc    putbuf_bs_check        ;üV
  722.         movea.l    (sp)+,a4~write
  723. putbuf_bs_end:
  724.         move.b    (sp)+,d2~byte        ;ìXé╚éΘìφÅ£é═òsùvé╛é┴é╜
  725.         bra    putbuf_end
  726. putbuf_bs_check:
  727.  
  728. * ..    ìφÅ£é╡é╜ 1 âoâCâg
  729. * XX    é╗é╠Æ╝æO($80üA$f0-$ff)
  730. * aaü`    ìXé╔æOò√
  731. * aa bb cc dd XX ..
  732.  
  733. * âfü[â^ù±é¬é╞é╠éµéñé╔ò╢ÄÜé≡ì\ɼé╖éΘé⌐é≡ìléªéΘ.
  734. * aa bb [cc dd] [XX ..]
  735. * é╞éóéñéµéñé╔ [cc dd]üA[XX ..] é¬ægé╞é╡é─ 2 âoâCâgò╢ÄÜé≡
  736. * ì\ɼé╡é─éóéΘé╚éτüAìXé╔éαéñ 1 âoâCâgüAXX é≡ìφÅ£é╖éΘ.
  737. * aa [bb cc] [dd XX] ..
  738. * é╞éóéñéµéñé╔ [bb cc] [dd XX] é¬ægé╔é╚é┴é─éóéΘé╚éτìφÅ£é═
  739. * é╡é╚éó.
  740.  
  741. * 1)[dd XX] é¬É¼ùºé╖éΘé⌐é≡Æ▓é╫éΘ.
  742. *   É¼ùºé╡é╚é»éΩé╬ [XX ..] é¬èmÆΦé╖éΘ.
  743. * 2)[dd XX] é¬É¼ùºé╖éΩé╬ [XX ..] é═ɼéΦùºé╜é╚éóé¬üAî╗ì▌é╠
  744. *   Åεò±é┼é═ÄΦæOé╠ [cc dd] é¬É¼ùºé╖éΘë┬ö\ɽé≡ö█ÆΦé┼é½é╚éó.
  745. *   éαé╡é╗éΩé¬É¼ùºé╖éΘé╚éτüA[cc dd] [XX ..] é¬èmÆΦé╡üAû{ôû
  746. *   é═é╟é┐éτé╚é╠é⌐ò¬é⌐éτé╚é¡é╚éΘ.
  747. * 3)éµé┴é─üA[cc dd] é¬É¼ùºé╖éΘé⌐é≡Æ▓é╫éΘ.
  748. *   É¼ùºé╡é╚é»éΩé╬ [dd XX] é¬èmÆΦé╖éΘ.
  749. * 4)[cc dd] é¬èmÆΦé╖éΩé╬ [XX ..] éαèmÆΦé╖éΘé¬üA[bb cc] é╔
  750. *   é┬éóé─éαô»ùlé╠ï^ûΓé¬É╢é╢éΘ.
  751. * 5)[bb cc]üA[aa bb] é╚é╟ɼùºé╖éΘî└éΦæOò√é╠âfü[â^é≡Æ▓é╫éΘ.
  752. * 6)ì┼îπé╔ɼùºé╡é╜ê╩Æué⌐éτ 2 âoâCâgé╕é┬ægé≡ì∞é┴é─éóé»é╬
  753. *   [dd XX] é╚é╠é⌐ [XX ..] é╚é╠é⌐é¬ò¬é⌐éΘ. é▒éΩé═üAXX éµéΦ
  754. *   ÄΦæOé┼ɼùºé╡é╜âoâCâgÉöé¬è∩Éöé⌐ï⌠Éöé⌐é┼ö╗Æfé┼é½éΘ.
  755.  
  756. putbuf_bs_loop:
  757.         subq.b    #1,d2~byte
  758.         bcs    putbuf_bs_loop_end    ;éαéñò╢ÄÜé¬Äcé┴é─éóé╚éó
  759.         subq.l    #1,a4~write
  760.         TopChk    a4~write
  761.         move.b    (a4~write),d3~temp    ;$80-$9f -> 4
  762.         lsr.b    #5,d3~temp        ;$e0-$ff -> 7
  763.         btst    d3~temp,#(1<<4)+(1<<7)
  764.         bne    putbuf_bs_loop        ;ìXé╔æOò√é≡Æ▓é╫éΘ
  765. putbuf_bs_loop_end:
  766.         movea.l    (sp)+,a4~write
  767.         .if    0
  768. * âïü[âvèJÄnÄ₧é╠ d2~byte é═ (sp).b é╠ÆléµéΦ 1 Å¼é│éó.
  769. * âïü[âvÅ≡îÅòsɼùºÄ₧é╔éα d2~byte é⌐éτ 1 é≡ê°éóé─éóéΘ.
  770.         addq.b    #2,d2~byte        ;ÅπïLô±ô_é╠ò¬é≡òΓÉ│
  771.         sub.b    (sp),d2~byte
  772.         neg.b    d2~byte            ;ɼùºé╡é╜âoâCâgÉö(XX é═è▄é▄é╚éó)
  773.         .else
  774.         sub.b    (sp),d2~byte        ;ìéæ¼ë╗
  775.         .endif
  776.         lsr.b    #1,d2~byte
  777.         bcs    putbuf_bs_end        ;è∩Éöé╚éτ [dd XX] é╚é╠é┼ìφÅ£é═òsùv
  778.  
  779. * ï⌠Éö(0 é╠ÅΩìçéαè▄é▐)é╚éτ [cc dd] [XX ..] é╚é╠é┼üA
  780. * éαéñ 1 âoâCâgìφÅ£é╖éΘ.
  781.  
  782.         move.b    (sp)+,d2~byte
  783.         subq.b    #1,d2~byte
  784.         addq.b    #1,d0~column        ;1 âoâCâgìφÅ£
  785.         subq.l    #1,a4~write
  786.         TopChk    a4~write
  787.         .endif
  788.  
  789.         .if    0
  790.  
  791. * âoâbâNâXâNâìü[âïë{ùùèJÄnÄ₧é╔îàê╩Æué≡îƒì╕üEòΓÉ│é╖éΘéµéñé╔é╡é╜é╠é┼
  792. * é▒é▒é┼é╠Åêù¥é═òsùvé╔é╚é┴é╜(97/09/19).
  793. * è∙é╔Ägùpé┼é½é╚éóâRü[âhé╚é╠é┼ùLî°é╔é╡é╚éóé▒é╞(98/05/27).
  794.  
  795. usereg2:    .reg    d0-d1/a1-a2/a5
  796.         PUSH    usereg2
  797.         lea    (line_buf,pc),a2
  798.         tst.b    (a2)
  799.         bmi    @f
  800.  
  801.         lea    (cursorY,pc),a5
  802.         move    (a5),d1
  803.         lsl    #2,d1
  804.         movea.l    (a2,d1.w),a1
  805.         cmpa.l    a1,a3~now        a3=Åæé½ì₧é▌ê╩Æu
  806.         bne    @f
  807.         move    -(a5),d1        cursorXbyte
  808.         move    -(a5),d0        cursorX
  809.         adda    d1,a1
  810.         addq.l    #1,a1
  811.         EndChk    a1
  812.         cmpa.l    a1,a4
  813.         bne    @f
  814.         subq    #1,d0
  815.         bmi    @f
  816.         subq    #1,d1
  817.         bmi    @f
  818.         move    d0,(a5)+
  819.         move    d1,(a5)+
  820. @@:
  821.         POP    usereg2
  822.         .endif
  823.  
  824.         bra    putbuf_end
  825.  
  826. ***
  827. putbuf_ctrl0~1f:
  828.         move    d1~char,d3~temp
  829.         add    d1~char,d3~temp
  830.         move    (putbuf_ctrl_table,pc,d3~temp.w),d3~temp
  831.         jmp    (putbuf_ctrl_table,pc,d3~temp.w)
  832.  
  833.  
  834. ;ɺîΣïLìåé╠Åêù¥ò¬è≥ò\
  835.  
  836. DCR:        .macro    num,addr
  837.         .rept    num
  838.         .dc    addr-putbuf_ctrl_table
  839.         .endm
  840.         .endm
  841.  
  842. putbuf_ctrl_table:
  843.         DCR     1,putbuf_nul        ;$00
  844.         DCR     7,putbuf_ctrl        ;$01ü`$07
  845.         DCR     1,putbuf_bs        ;$08
  846.         DCR     1,putbuf_tab        ;$09
  847.         DCR     1,putbuf_lf        ;$0a
  848.         DCR     2,putbuf_ctrl        ;$0bü`$0c
  849.         DCR     1,putbuf_cr        ;$0d
  850.         DCR    13,putbuf_ctrl        ;$0eü`$1a
  851.         DCR     1,putbuf_esc        ;$1b
  852.         DCR     4,putbuf_ctrl        ;$1cü`$1f
  853.  
  854. ;-ncé┼putbuf_ctrl_ncé╔Åæé½è╖éªéΘâRü[âh=1
  855. PUT_CTRL_LIST:    .equ    %1111_0_1111111111111_0_11_000_1111111_0
  856.             ;fedc_b_a9876543210fe_d_cb_a98_7654321_0
  857.  
  858.  
  859. * New DOS Call -------------------------------- *
  860.  
  861. dos_fnckey:
  862.         pea    (display_system_status,pc)
  863.         move.l    (fnckey_orig,pc),-(sp)
  864.         rts
  865.  
  866. dos_hendsp:
  867.         cmpi    #3,(a6)
  868.         beq    dos_hendsp_close    âéü[âhò\ĪâEâBâôâhâEé≡âNâìü[âY
  869.         tst    (a6)
  870.         bne    call_original_dos_hendsp
  871.         bset    #FEPOPEN_bit,(bitflag)    âéü[âhò\ĪâEâBâôâhâEé≡âIü[âvâô
  872. call_original_dos_hendsp:
  873.         move.l    (hendsp_orig,pc),-(sp)
  874.         rts
  875.  
  876. dos_hendsp_close:
  877.         bsr    call_original_dos_hendsp
  878.         bclr    #FEPOPEN_bit,(bitflag)    ò┬é╢é╜
  879.         bra    display_system_status
  880.  
  881. dos_conctrl:
  882.         cmpi    #$e,(a6)
  883.         bne    call_original_dos_conctrl
  884.  
  885.         move    (2,a6),d0
  886.         bmi    dos_conctrl_getfncmode
  887.         bsr    set_funcdisp_flag
  888.         bsr    call_original_dos_conctrl
  889. display_system_status:
  890.         move.b    (bitflag,pc),-(sp)
  891. *        andi.b    #IS_FEPOPEN.or.IS_NO_FUNC.or.IS_GETSS,(sp)+
  892.         andi.b    #IS_FEPOPEN.or.IS_NO_FUNC,(sp)+
  893.         bne    display_sys_stat_end
  894.         btst    #OPT_F_bit,(option_flag,pc)
  895.         bne    display_sys_stat_end
  896.  
  897. usereg        .reg    d0-d4/a1
  898.         PUSH    usereg
  899.         move.b    (option_f_col,pc),d1    ò\Īæ«É½
  900.         moveq    #0,d2            ì╢Æ[
  901.         moveq    #31,d3            ì┼ë║ìs
  902.  
  903.         cmpi.b    #18,($93c)        CRTMOD
  904.         bne    @f
  905.         moveq    #848/16-1,d3
  906. @@:
  907.         moveq    #2-1,d4            2ò╢ÄÜ
  908.         lea    (sys_stat_prtbuf,pc),a1
  909.         cmpi    #RTS,(condrv_put_char-sys_stat_prtbuf,a1)
  910.         sne    (a1)
  911.         addi.b    #'!',(a1)
  912.         .fail    ('!'-1).ne.SPACE
  913.         IOCS    _B_PUTMES
  914.         POP    usereg
  915. display_sys_stat_end:
  916.         rts
  917.  
  918. dos_conctrl_getfncmode:
  919.         bsr    call_original_dos_conctrl
  920.         bsr    set_funcdisp_flag
  921.         bra    display_system_status
  922.  
  923. set_funcdisp_flag
  924. usereg        .reg    d0-d1/a0
  925.         PUSH    usereg
  926.         lea    (bitflag,pc),a0
  927.         moveq    #NO_FUNC_bit,d1
  928.  
  929.         bset    d1,(a0)
  930.         cmpi    #2,d0
  931.         bcc    @f        2ê╚ë║é╚éτò\Īé╡é─éαù╟éó
  932.         bchg    d1,(a0)
  933. @@:
  934.         POP    usereg
  935.         rts
  936.  
  937. call_original_dos_conctrl:
  938.         move.l    (conctrl_orig,pc),-(sp)
  939.         rts
  940.  
  941. * Condrv Official Work ------------------------ *
  942.  
  943.         .even
  944. stop_level:    .dc    0
  945. option_flag:
  946.         .dc.b    0
  947. OPT_J_bit:    .equ    7 : -j(âRü[âhôⁿù═Ä₧é╔16ÉiÉöò╢ÄÜé╠é▌âyü[âXâgé╖éΘ)
  948. OPT_BG_bit:    .equ    1 : BGæ╬ë₧(sleepé╖éΘ - é▒éΩé═-zé╠öñé╛é┴é╜)
  949. OPT_F_bit:    .equ    0 : -f(!é≡ò\Īé╡é╚éó)
  950.         .even
  951.         .dc    0,0            âyü[âXâgé╠âEâFâCâgâJâEâôâ^/Åëè·Æl(ûóÄgùp)
  952.         .dc.l    condrv_system_call
  953. nul_string:
  954.         .dc.b    0            ;ï≤ò╢ÄÜù±(Åφé╔ NUL)
  955. keyctrl_flag:
  956.         .dc.b    0            -1:âLü[æÇì∞ù}ɺ
  957.         .dc.l    condrv_put_char
  958. pastbuf_size:
  959.         .dc.l    KBbuf_Default
  960. pastbuf_adr:
  961.         .dc.l    keypast_buffer
  962.         .dc.l    'hmk*'
  963.  
  964. * IOCS _KEY_INIT ------------------------------ *
  965.  
  966. iocs_key_init:
  967.         move.l    (key_init_orig,pc),-(sp)
  968.         bra    initialize_keypast_buffer
  969.  
  970. * âLü[âoâbâtâ@Åëè·ë╗ -------------------------- *
  971.  
  972. initialize_keypast_buffer:
  973.         .if    0
  974.         movea.l    (pastbuf_adr,pc),a0
  975. @@:        tst.b    (a0)+
  976.         bne    @b
  977.         subq.l    #1,a0
  978.         move.l    a0,(past_pointer)
  979.         .endif
  980.         lea    (nul_string,pc),a0    ;NUL é═âÅü[âNôαé╠âAâhâîâXé≡É▌ÆΦ
  981.         move.l    a0,(past_pointer-nul_string,a0)
  982.         adda.l    (pastbuf_size,pc),a0    ;âoâbâtâ@ûûö÷é╔ö╘ò║é≡Æué¡
  983.         clr.b    (keypast_buffer-nul_string-1,a0)
  984.         rts
  985.  
  986.  
  987. * âoâbâNâìâOâoâbâtâ@Åëè·ë╗ -------------------- *
  988.  
  989. check_backscroll_buffer:
  990.         movea.l    (backscroll_buf_adr,pc),a6
  991.         cmpi.l    #'hmk*',(a6)+
  992.         beq    check_backscroll_buffer_end
  993.  
  994. initialize_backscroll_buffer:
  995. usereg:        .reg    d0/a5-a6
  996.         PUSH    usereg
  997.         moveq    #0,d0
  998.         movea.l    (backscroll_buf_adr,pc),a6
  999.         lea    (bufstruct_size,a6),a5
  1000.  
  1001.         move.l    #'hmk*',(a6)+
  1002.         move.l    a5,(a6)+        BufTop
  1003.         .rept    3
  1004.         move.l    a5,(a6)+        Éµô¬ìs/î╗ì▌ìs/Åæé½ì₧é▌â|âCâôâ^
  1005.         move.b    d0,(a5)+
  1006.         .endm
  1007.         subq.l    #3,a5
  1008.         adda.l    (buffer_size,pc),a5
  1009.         move.l    a5,(a6)+        BufEnd
  1010.         move.l    d0,(a6)+        ûóÄgùp
  1011.         move.l    d0,(a6)            üV
  1012.  
  1013.         lea    (line_buf,pc),a5
  1014.         st    (a5)
  1015.         move    d0,(bufwrite_last-line_buf,a5)
  1016.         move.b    #WIDTH,(putbuf_column-line_buf,a5)
  1017.  
  1018.         POP    usereg
  1019. check_backscroll_buffer_end:
  1020.         rts
  1021.  
  1022.  
  1023. * IOCS _B_KEYINP ------------------------------ *
  1024.  
  1025. iocs_b_keyinp:
  1026.         bsr    iocs_b_keysns
  1027.         tst.l    d0
  1028.         beq    iocs_b_keyinp
  1029. call_orig_b_keyinp:
  1030.         move.l    (b_keyinp_orig,pc),-(sp)
  1031.         rts
  1032.  
  1033. * IOCS _B_KEYSNS ------------------------------ *
  1034.  
  1035. __FAST_PAST:    .equ    0            * 1:êΩë±é┼64bytesô]æùé╖éΘ
  1036.  
  1037. iocs_b_keysns:
  1038.         movea.l    (past_pointer,pc),a0
  1039.         moveq    #0,d0
  1040.         move.b    (a0)+,d0
  1041.         beq    not_past_mode
  1042.  
  1043.         KEYbtst    KEY_ESC
  1044.         bne    past_stop        * ESC é¬ëƒé│éΩé─éóé╜éτâyü[âXâgé≡ÆåÄ~é╖éΘ
  1045.  
  1046.         tst    (KBUFNUM)
  1047.         bne    not_past_mode        * âLü[é¬ôⁿù═é│éΩé─éóéΘ
  1048.  
  1049. usereg:        .reg    d1-d2/a1-a3
  1050.         PUSH    usereg
  1051.         move    sr,-(sp)
  1052.  
  1053.         lea    (ctype_table,pc),a3
  1054.         moveq    #0,d1            êΩë₧âNâèâA
  1055.         moveq    #0,d2            -1:2âoâCâgò╢ÄÜÅêù¥Æå
  1056.  
  1057.         ori    #$700,sr
  1058. past_one_more_char:
  1059.         lea    (KBUFNUM),a2
  1060.         movea.l    (2,a2),a1
  1061.         addq.l    #2,a1
  1062.         cmpa    #$89c,a1
  1063.         bcs    @f
  1064.         lea    ($81c),a1
  1065. @@:
  1066.         bclr    #AFTERCR_bit,(bitflag)
  1067.         beq    past_without_header    òüÆ╩é╔Åoù═
  1068.  
  1069.         move.b    (option_flag,pc),d1    -j
  1070.         bpl    @f            âRü[âhôⁿù═âéü[âhé┼é╚é»éΩé╬âwâbâ_éáéΦ
  1071.  
  1072.         LEDbtst    LED_âRü[âh
  1073.         bne    past_without_header    âRü[âhôⁿù═âéü[âhé┼é═Åφé╔âwâbâ_é≡Åoù═é╡é╚éó
  1074. @@:
  1075.         move.b    (past_header,pc),d1
  1076.         beq    past_without_header
  1077.  
  1078.         move    d1,(a1)
  1079.         addq    #1,(a2)+
  1080.         move.l    a1,(a2)
  1081.  
  1082.         .if    __FAST_PAST
  1083.         subq.l    #1,a0
  1084.         .endif
  1085.         bra    past_char_next
  1086.  
  1087. past_without_header:
  1088.         move.l    a0,(past_pointer)
  1089.         move.b    (option_flag,pc),d1    -j
  1090.         bpl    @f
  1091.         LEDbtst    LED_âRü[âh
  1092.         beq    @f
  1093.  
  1094.         btst.b    #IS_HEX_bit,(a3,d0.w)    0-9A-Fa-fé⌐üH
  1095.         beq    past_char_next
  1096. @@:
  1097.         move    d0,(a1)
  1098.         addq    #1,(a2)+
  1099.         move.l    a1,(a2)
  1100.  
  1101.         tst.b    (a3,d0.w)
  1102.         bpl    @f            1âoâCâgò╢ÄÜé⌐üH
  1103.         tst    d2
  1104.         bne    past_char_next
  1105.  
  1106.         moveq    #-1,d2
  1107.         move.b    (a0)+,d0        éQâoâCâgû┌é≡Åêù¥
  1108.         bne    past_one_more_char
  1109.         bra    past_char_end
  1110. @@:
  1111.         cmpi.b    #CR,d0
  1112.         bne    past_char_next
  1113.         bset    #AFTERCR_bit,(bitflag)
  1114. past_char_next:
  1115.         .if    __FAST_PAST
  1116.  
  1117.         cmpi    #64-1,-(a2)        * êΩïCé╔ô]æùé╖éΘé╞ĵéΦé▒é┌é╖üH
  1118.         bhi    @f            * âoâbâtâ@é¬û₧öt
  1119.  
  1120.         move.b    (a0)+,d0        Äƒé╠ò╢ÄÜ
  1121.         bne    past_one_more_char
  1122. @@:
  1123.         .endif
  1124. past_char_end:
  1125.         move    (sp)+,sr
  1126.         POP    usereg            * âyü[âXâgé╡é╜éτâLü[â`âFâbâNé═òsùv
  1127. call_orig_b_keysns:
  1128.         move.l    (b_keysns_orig,pc),-(sp)
  1129.         rts
  1130.  
  1131. not_past_mode:
  1132. usereg:        .reg    d1-d7/a0-a6
  1133.         PUSH    usereg
  1134. * sleepæ╬ë₧ {
  1135.         move.b    (sleep_flag,pc),d0
  1136.         bne    wakeup_backscroll
  1137. * }
  1138.         bsr    call_orig_b_keysns
  1139.  
  1140.         btst    #BACKSCR_bit,(bitflag,pc)
  1141.         bne    iocs_keysns_return
  1142.  
  1143.         move    d0,-(sp)
  1144.         move.b    (sp)+,d1
  1145.         beq    iocs_keysns_return
  1146.         move.b    (keyctrl_flag,pc),d2
  1147.         bne    iocs_keysns_return
  1148.  
  1149.         lea    (SFTSTAT),a0
  1150.         btst    #SFT_CTRL,(a0)
  1151.         beq    @f
  1152.  
  1153. KEYCHK:        .macro    keycode,address
  1154.         cmpi.b    #keycode,d1
  1155.         beq    address
  1156.         .endm
  1157.  
  1158.         KEYCHK    KEY_4   ,direct_key_past
  1159.         KEYCHK    KEY_HELP,direct_key_past
  1160.         KEYCHK    KEY_BS  ,direct_key_toggle
  1161.         KEYCHK    KEY_CLR ,direct_key_clear
  1162.  
  1163.         KEYCHK    KEY_1,direct_key_backscroll_1
  1164.         KEYCHK    KEY_2,direct_key_backscroll_2
  1165. @@:
  1166.         move.b    (option_o_flag,pc),d2
  1167.         btst    d2,(a0)
  1168.         beq    iocs_keysns_return
  1169.  
  1170.         KEYCHK    KEY_ü¬  ,direct_key_backscroll_2
  1171.         KEYCHK    KEY_ü½  ,direct_key_backscroll_1
  1172.         KEYCHK    KEY_UNDO,direct_key_backscroll_1
  1173. @@:
  1174.         btst    #SUSPEND_bit,(bitflag,pc)
  1175.         beq    iocs_keysns_return
  1176.  
  1177. * âoâbâNâìâOé≡èJéóé╜é▄é▄ÅIù╣é╡é╜ÅΩìçé╔ùLî°é╚âLü[
  1178.         KEYCHK    KEY_ü⌐    ,direct_key_left
  1179.         KEYCHK    KEY_ü¿    ,direct_key_right
  1180.         KEYCHK    KEY_R_DOWN,direct_key_rolldown
  1181.         KEYCHK    KEY_R_UP  ,direct_key_rollup
  1182. iocs_keysns_return:
  1183.         POP    usereg
  1184.         rts
  1185.  
  1186. iocs_keysns_flush:
  1187.         bsr    call_orig_b_keyinp
  1188. iocs_keysns_return_0:
  1189.         moveq    #0,d0
  1190.         bra    iocs_keysns_return
  1191.  
  1192. * ccrZ=1é┼âeâLâXâgÄgùpÆå
  1193. is_text_used:
  1194.         cmpi.b    #2,(TXUSEMD)        ;âeâLâXâgëµû╩é╠Ägùpâéü[âh
  1195.         bne    @f
  1196.         btst    #2,(option_m_flag,pc)
  1197. @@:        rts
  1198.  
  1199. * âyü[âXâgé≡ÆåÄ~é╖éΘ
  1200. past_stop:
  1201.         bsr    initialize_keypast_buffer
  1202. @@:
  1203.         KEYbtst    KEY_ESC
  1204.         bne    @b            ;ESCé¬ùúé│éΩéΘé▄é┼æ╥é┬
  1205. keybuf_clear:
  1206.         moveq    #0,d0
  1207.         lea    (KBUFNUM),a0
  1208.         move    d0,(a0)+
  1209.         move.l    (a0)+,(a0)
  1210.         rts                ;0é≡ò╘é╖
  1211.  
  1212. * ^4 , ^HELP : âJâbâgé╡é╜ù╠êµé≡âyü[âXâg
  1213. direct_key_past:
  1214.         bsr    yank_sub
  1215.         bsr    wait_release_ctrl_key
  1216.         bra    iocs_keysns_flush
  1217.  
  1218. * ^BS : âoâbâtâ@ĵéΦì₧é▌ÆåÆf/ì─èJ
  1219. direct_key_toggle:
  1220.         bsr    key_toggle_buffering_mode
  1221.         bra    iocs_keysns_flush
  1222.  
  1223. * ~ROLL DOWN : âEâBâôâhâEê╩Æué≡Åπé░éΘ
  1224. direct_key_rolldown:
  1225.         bsr    is_text_used
  1226.         beq    @f
  1227.  
  1228.         bsr    key_slide_window_up
  1229. @@:
  1230.         bra    iocs_keysns_flush
  1231.  
  1232. * ~ROLL UP : âEâBâôâhâEê╩Æué≡ë║é░éΘ
  1233. direct_key_rollup:
  1234.         bsr    is_text_used
  1235.         beq    @f
  1236.  
  1237.         bsr    key_slide_window_down
  1238. @@:
  1239.         bra    iocs_keysns_flush
  1240.  
  1241. * ~ü⌐ : âXâNâìü[âïâAâbâv
  1242. direct_key_left:
  1243.         bsr    is_text_used
  1244.         beq    @f
  1245.  
  1246.         bsr    direct_key_rl_sub
  1247.         bsr    key_move_window_up
  1248. @@:
  1249.         bra    iocs_keysns_flush
  1250.  
  1251. * ~ü¿ : âXâNâìü[âïâ_âEâô
  1252. direct_key_right:
  1253.         bsr    is_text_used
  1254.         beq    @f
  1255.  
  1256.         bsr    direct_key_rl_sub
  1257.         move    (window_line,pc),d0
  1258.         bsr    draw_line_d0
  1259.         bsr    key_move_window_down
  1260. @@:
  1261.         bra    iocs_keysns_flush
  1262.  
  1263. direct_key_rl_sub:
  1264.         bsr    check_backscroll_buffer
  1265.         move    (line_buf,pc),d0
  1266.         bmi    key_beginning_of_buffer
  1267.         rts
  1268.  
  1269. * ^CLR : âoâbâtâ@Å┴ïÄ
  1270. direct_key_clear:
  1271.         bsr    initialize_backscroll_buffer
  1272.         bra    iocs_keysns_flush
  1273.  
  1274. * ò╢ÄÜò\Īâïü[â`âô ---------------------------- *
  1275.  
  1276. * ÄwÆΦìs(d0.w)é≡ò`ëµ
  1277. draw_line_d0:
  1278. usereg        .reg    d1/a1-a2        d0 éαöjë≤é╡é╚éóé▒é╞
  1279.         PUSH    usereg
  1280.         lea    (line_buf,pc),a3
  1281.         moveq    #0,d1
  1282.         move    d0,d1
  1283.         lsl    #2,d1
  1284.         movea.l    (a3,d1.w),a1
  1285.         move    d0,d1
  1286.         swap    d1
  1287.         lsr.l    #5,d1
  1288.         movea.l    (text_address,pc),a2
  1289.         adda.l    d1,a2            ÄwÆΦìsé╠âAâhâîâX
  1290.         bsr    draw_line
  1291.         POP    usereg
  1292.         rts
  1293.  
  1294. draw_line:
  1295. usereg        .reg    d0-d5/a0-a2/a4-a5
  1296.         PUSH    usereg
  1297.         move.l    a1,d0
  1298.         bpl    @f
  1299.         lea    (nul_string,pc),a1
  1300. @@:
  1301.         .ifdef    __EMACS
  1302.             moveq    #0,d5
  1303.         .else
  1304.         lea    (line_buf,pc),a5    ;â}ü[âNï½èEé╠ÄZÅo
  1305.         move    (cursorY,pc),d1
  1306.         lsl    #2,d1
  1307.         movea.l    (a5,d1.w),a4
  1308.         adda    (cursorXbyte,pc),a4
  1309.         addq.l    #1,a4
  1310.         EndChk2    a4
  1311.         movea.l    (mark_char_adr,pc),a5
  1312.         cmpa.l    a4,a5
  1313.         bcc    @f
  1314.         exg    a4,a5
  1315. @@:
  1316.         .endif
  1317.         moveq    #0,d3
  1318.         move.b    (a1)+,d3
  1319.         EndChk    a1
  1320.         moveq    #0,d4
  1321.         bra    draw_line_
  1322.  
  1323. draw_line_loop:
  1324.         .ifndef    __EMACS
  1325.         move.l    (mark_char_adr,pc),d5
  1326.         beq    draw_line_nomark
  1327.         moveq    #0,d5
  1328.         cmpa.l    (buffer_old,a6),a4
  1329.         bcc    @f
  1330.         cmpa.l    (buffer_old,a6),a5
  1331.         bcs    @f
  1332.         cmpa.l    a4,a1
  1333.         bcs    draw_line_mark
  1334.         cmpa.l    a5,a1
  1335.         bcs    draw_line_nomark
  1336.         bra    draw_line_mark
  1337. @@:
  1338.         cmpa.l    a4,a1
  1339.         bcs    draw_line_nomark
  1340.         cmpa.l    a5,a1
  1341.         bcc    draw_line_nomark
  1342. draw_line_mark:
  1343.         moveq    #-1,d5
  1344. draw_line_nomark:
  1345.         .endif
  1346.         move.b    (a1)+,d1
  1347.         EndChk    a1
  1348.         tst.b    d1
  1349.         bpl    @f            $00-$7f
  1350.         cmpi    #$a0,d1
  1351.         bcs    draw_line_2byte        $80-$9f
  1352.         cmpi    #$e0,d1
  1353.         bcs    @f            $a0-$df
  1354. draw_line_2byte:
  1355.         lsl    #8,d1
  1356.         move.b    (a1)+,d1
  1357.         EndChk    a1
  1358.         subq    #1,d3
  1359.         bcs    draw_line_abort
  1360. @@:
  1361.         bsr    draw_char_d1
  1362. draw_line_:
  1363.         moveq    #0,d1
  1364.         dbra    d3,draw_line_loop
  1365. draw_line_abort:
  1366.         .ifndef    __EMACS
  1367.             moveq    #0,d5
  1368.         .endif
  1369.         bra    @f
  1370. draw_space_loop:
  1371.         bsr    draw_space
  1372. @@:
  1373.         cmpi.b    #WIDTH,d4
  1374.         bcs    draw_space_loop
  1375.         POP    usereg
  1376.         rts
  1377.  
  1378. draw_space:
  1379.         addq    #1,d4
  1380.         move.b    d5,(a2)+
  1381. _offset        .set    $80
  1382.         .rept    16-1
  1383.         move.b    d5,(_offset-1,a2)
  1384. _offset        .set    _offset+$80
  1385.         .endm
  1386.         rts
  1387.  
  1388. draw_char_d1:
  1389.         cmpi    #$20,d1
  1390.         bhi    draw_char_fntadr    òüÆ╩é╠ò╢ÄÜ
  1391.         beq    draw_space
  1392.  
  1393.         cmpi    #CR,d1
  1394.         bne    is_tab
  1395.  
  1396.         lea    (cr_font,pc),a0
  1397.         tst.b    (option_r_flag-cr_font,a0)
  1398.         bne    draw_char_condrv_font    -r ÄwÆΦÄ₧é═ëⁿìsïLìåé≡ò\Ī
  1399.         rts
  1400. is_tab:
  1401.         cmpi    #TAB,d1
  1402.         bne    draw_char_fntadr    é╗é╠æ╝é╠ɺîΣâRü[âh
  1403.  
  1404.         lea    (tab_font_1,pc),a0
  1405.         tst.b    (option_t_flag-tab_font_1,a0)
  1406.         beq    draw_invisible_tab
  1407. @@:
  1408.         bsr    draw_char_condrv_font    -t ÄwÆΦÄ₧é═TABïLìåé≡ò\Ī
  1409.         lea    (tab_font_2,pc),a0
  1410.         moveq    #%111,d1        8é╠ö{ÉöâJâëâÇé▄é┼ò`ëµ
  1411.         and    d4,d1
  1412.         bne    @b
  1413.         rts
  1414. draw_invisible_tab:
  1415.         bsr    draw_space
  1416.         moveq    #%111,d1
  1417.         and    d4,d1
  1418.         bne    draw_invisible_tab
  1419.         rts
  1420.  
  1421. draw_char_fntadr:
  1422.         moveq    #8,d2
  1423.         movea.l    (_FNTADR*4+$400),a0
  1424.         jsr    (a0)
  1425.         movea.l    d0,a0
  1426.         tst    d1
  1427.         bne    draw_widechar        æSèpò╢ÄÜ
  1428. draw_char_condrv_font:
  1429.         .ifndef    __EMACS
  1430.             tst.b    d5        ö╜ô]é⌐üH
  1431.             bne    draw_char_reverse
  1432.         .endif
  1433.  
  1434.         addq    #1,d4            ö╝èp
  1435.         move.b    (a0)+,(a2)+
  1436. _offset        .set    $80
  1437.         .rept    16-1
  1438.         move.b    (a0)+,(_offset-1,a2)
  1439. _offset        .set    _offset+$80
  1440.         .endm
  1441.         rts
  1442.  
  1443. draw_widechar:
  1444.         .ifndef    __EMACS
  1445.             tst.b    d5
  1446.             bne    draw_widechar_reverse
  1447.         .endif
  1448.  
  1449.         addq    #2,d4            æSèp
  1450.         move.b    (a0)+,(a2)+
  1451.         move.b    (a0)+,(a2)+
  1452. _offset        .set    $80
  1453.         .rept    16-1
  1454.         move.b    (a0)+,(_offset-2,a2)
  1455.         move.b    (a0)+,(_offset-1,a2)
  1456. _offset        .set    _offset+$80
  1457.         .endm
  1458.         rts
  1459.  
  1460.         .ifndef    __EMACS
  1461. draw_char_reverse:
  1462.         addq    #1,d4            ö╝èpö╜ô]
  1463.         move.b    (a0)+,d0
  1464.         not.b    d0
  1465.         move.b    d0,(a2)+
  1466. _offset        .set    $80
  1467.         .rept    16-1
  1468.         move.b    (a0)+,d0
  1469.         not.b    d0
  1470.         move.b    d0,(_offset-1,a2)
  1471. _offset        .set    _offset+$80
  1472.         .endm
  1473.         rts
  1474.  
  1475. draw_widechar_reverse:
  1476.         addq    #2,d4            æSèpö╜ô]
  1477.         .rept    2
  1478.         move.b    (a0)+,d0
  1479.         not.b    d0
  1480.         move.b    d0,(a2)+
  1481.         .endm
  1482. _offset        .set    $80
  1483.         .rept    16-1
  1484.         move.b    (a0)+,d0
  1485.         not.b    d0
  1486.         move.b    d0,(_offset-2,a2)
  1487.         move.b    (a0)+,d0
  1488.         not.b    d0
  1489.         move.b    d0,(_offset-1,a2)
  1490. _offset        .set    _offset+$80
  1491.         .endm
  1492.         rts
  1493.         .endif
  1494.  
  1495.  
  1496.         .ifndef    __EMACS
  1497. draw_char_c:
  1498. usereg        .reg    d0-d7/a0-a5
  1499.         PUSH    usereg
  1500.  
  1501.         lea    (line_buf,pc),a3
  1502.         moveq    #0,d5
  1503.         move    d7,d2            cursorY
  1504.         lsl    #2,d2
  1505.         movea.l    (a3,d2.w),a1
  1506.         adda    d6,a1
  1507.         addq.l    #1,a1
  1508.         EndChk    a1
  1509.         moveq    #0,d2
  1510.         move    d7,d2
  1511.         swap    d2
  1512.         lsr.l    #5,d2
  1513.         movea.l    (text_address,pc),a2
  1514.         adda.l    d2,a2
  1515.         swap    d6
  1516.         adda    d6,a2
  1517.         move    d6,d4
  1518.  
  1519.         move    (cursorY,pc),d1
  1520.         lsl    #2,d1
  1521.         movea.l    (a3,d1.w),a4
  1522.         adda    (cursorXbyte,pc),a4
  1523.         addq.l    #1,a4
  1524.         EndChk2    a4
  1525.         movea.l    (mark_char_adr,pc),a5
  1526.         cmpa.l    a4,a5
  1527.         bcc    @f
  1528.         exg    a4,a5
  1529. @@:
  1530.         move.l    (mark_char_adr,pc),d1
  1531.         beq    draw_char_c_nomark
  1532.         cmpa.l    (buffer_old,a6),a4
  1533.         bcc    @f
  1534.         cmpa.l    (buffer_old,a6),a5
  1535.         bcs    @f
  1536.         cmpa.l    a4,a1
  1537.         bcs    draw_char_c_mark
  1538.         cmpa.l    a5,a1
  1539.         bcs    draw_char_c_nomark
  1540.         bra    draw_char_c_mark
  1541. @@:
  1542.         cmpa.l    a4,a1
  1543.         bcs    draw_char_c_nomark
  1544.         cmpa.l    a5,a1
  1545.         bcc    draw_char_c_nomark
  1546. draw_char_c_mark:
  1547.         moveq    #-1,d5            ö╜ô]
  1548. draw_char_c_nomark:
  1549.         moveq    #0,d1
  1550.         move.b    (a1)+,d1
  1551.         bpl    @f
  1552.         cmpi    #$a0,d1
  1553.         bcs    draw_char_c_2byte
  1554.         cmpi    #$e0,d1
  1555.         bcs    @f
  1556. draw_char_c_2byte:
  1557.         EndChk    a1            ;é▒é▒é┼Æ▓é╫éΩé╬ö╝èpé╠Ä₧æ¼éó
  1558.         lsl    #8,d1
  1559.         move.b    (a1),d1
  1560. @@:
  1561.         bsr    draw_char_d1
  1562.         POP    usereg
  1563.         rts
  1564.         .endif
  1565.  
  1566.  
  1567. * âJü[â\âïò`ëµ -------------------------------- *
  1568.  
  1569. blink_cursor:
  1570.         IOCS    _ONTIME
  1571.         move.l    d0,d2
  1572.         lea    (last_time,pc),a0
  1573.         move.l    (a0),d1
  1574.         cmp.l    d1,d2
  1575.         bcc    @f
  1576.  
  1577.         addi.l    #99*60*60*24,d2        24Ä₧è╘îoë▀é╡é─ 0 é╔û▀é┴é╜Ä₧é╠òΓÉ│
  1578. @@:
  1579.         sub.l    d1,d2            îoë▀Ä₧è╘
  1580.         moveq    #0,d1
  1581.         move.b    (cursor_blink_count,pc),d1
  1582.         cmp.l    d1,d2
  1583.         bcs    blink_cursor_end    é▄é╛Ä₧è╘é¬é╜é┴é─éóé╚éó
  1584.  
  1585.         move.l    d0,(a0)            âJü[â\âïô_û┼Ä₧ìÅé≡ìXÉV
  1586.         move.b    #BLINKCYCLE,(cursor_blink_count-last_time,a0)
  1587.         bra    blink_cursor_sub
  1588.  
  1589. clear_cursor:
  1590.         move.l    a0,-(sp)
  1591.         lea    (cursor_blink_count,pc),a0
  1592.         clr.b    (a0)+
  1593.         tst.b    (a0)            cursor_blink_state
  1594.         movea.l    (sp)+,a0
  1595.         beq    blink_cursor_end
  1596.  
  1597. blink_cursor_sub:
  1598. usereg        .reg    d0/a1-a2
  1599.         PUSH    usereg
  1600.         lea    (cursor_blink_state,pc),a2
  1601.         not.b    (a2)
  1602.         movea.l    (text_address,pc),a2
  1603.         adda    (cursorX,pc),a2
  1604.         moveq    #0,d0
  1605.         move    (cursorY,pc),d0
  1606.         swap    d0
  1607.         lsr.l    #5,d0
  1608.         adda.l    d0,a2
  1609. @@:
  1610.         lea    (CRTC_R21),a1
  1611.         move    (a1),d0
  1612.         bclr    #0,(a1)
  1613. _offset        .set    0
  1614.         .rept    16
  1615.         not.b    (_offset,a2)
  1616. _offset        .set    _offset+$80
  1617.         .endm
  1618.         move    d0,(a1)
  1619.         POP    usereg
  1620. blink_cursor_end:
  1621.         rts
  1622.  
  1623. blink_cursor_direct:
  1624.         PUSH    usereg
  1625.         movea.l    (mes_end_adr,pc),a2
  1626.         bra    @b
  1627.  
  1628.  
  1629. * IOCS _B_KEYSNS é⌐éτé╠âLü[ôⁿù═ --------------- *
  1630.  
  1631. * ^2 , ~ü¬ : âoâbâtâ@é╠ì┼îπé⌐éτâoâbâNâìâOé╔ôⁿéΘ
  1632. direct_key_backscroll_2:
  1633.         bsr    is_text_used
  1634.         beq    iocs_keysns_flush
  1635.  
  1636.         bsr    check_backscroll_buffer
  1637.         bsr    end_of_buffer_sub
  1638.  
  1639.         lea    (cursorY,pc),a0
  1640.         move    d2,(a0)
  1641.         bpl    @f
  1642.         clr    (a0)
  1643. @@:        st    (cursorX-cursorY,a0)    ;ì┼ÅIìsëEÆ[é╔ê┌ô«
  1644. into_backscroll_at_lastpos:
  1645.         bsr    check_column
  1646. * sleepæ╬ë₧ {
  1647.         bsr    tst_and_clr_sleep_flag
  1648.         beq    into_backscroll_open_draw
  1649.  
  1650.         lea    (last_line_ptr,pc),a2
  1651.         movea.l    (a2)+,a0        ;last_line_ptr
  1652.         movea.l    (a0),a1            ;î╗ì▌é╠âAâhâîâX
  1653.         cmpa.l    (a2),a1            ;last_line_adr
  1654.         bne    into_backscroll_redraw
  1655.         tst.l    (a2)+
  1656.         bmi    into_backscroll_skip_draw
  1657.         cmpm.b    (a2)+,(a1)+        ;last_line_byte
  1658.         beq    into_backscroll_skip_draw
  1659. into_backscroll_redraw:
  1660.         bsr    clear_cursor
  1661.         bsr    check_column
  1662.  
  1663.         move.l    a0,d0
  1664.         pea    (line_buf,pc)
  1665.         sub.l    (sp)+,d0
  1666.         lsr    #2,d0            ;d0=last_line
  1667. into_backscroll_redraw_loop:
  1668.         tst.l    (a0)+
  1669.         bmi    into_backscroll_skip_draw
  1670.         bsr    draw_line_d0
  1671.         addq    #1,d0
  1672.         cmp    (window_line,pc),d0
  1673.         bls    into_backscroll_redraw_loop
  1674.         bra    into_backscroll_skip_draw
  1675.  
  1676. tst_and_clr_sleep_flag:
  1677.         lea    (sleep_flag,pc),a0
  1678.         tst.b    (a0)
  1679.         sf    (a0)
  1680.         rts
  1681.  
  1682. into_backscroll_at_top:
  1683.         bsr    tst_and_clr_sleep_flag
  1684.         bne    into_backscroll_skip_open
  1685. into_backscroll_open_draw:
  1686.         bsr    open_backscroll_window
  1687. into_backscroll_skip_open:
  1688.         bsr    draw_backscroll
  1689.         bsr    call_orig_b_keyinp    ;âIü[âvâôÄ₧é╠âLü[ôⁿù═é≡Å┴é╖
  1690. into_backscroll_skip_draw:
  1691.         bclr    #SUSPEND_bit,(bitflag)
  1692. * }
  1693.         bsr    keyinp_loop_start    ;âüâCâôâïü[âv
  1694. * sleepæ╬ë₧ {
  1695.         move.b    (sleep_flag,pc),d0
  1696.         beq    not_sleep_exit
  1697.  
  1698.         move    (window_line,pc),d0
  1699.         lea    (line_buf,pc),a0
  1700.         tst.l    (a0)
  1701.         bmi    @f
  1702. get_last_line_loop:
  1703.         tst.l    (a0)+
  1704.         dbmi    d0,get_last_line_loop
  1705.         subq.l    #4,a0
  1706.         bpl    @f
  1707.         subq.l    #4,a0
  1708. @@:        lea    (last_line_ptr,pc),a2
  1709.         movea.l    (a0),a1
  1710.         move.l    a0,(a2)+        ;last_line_ptr
  1711.         move.l    a1,(a2)+        ;last_line_adr
  1712.         move.l    a1,d0
  1713.         bmi    @f
  1714.         move.b    (a1),(a2)+        ;last_line_byte
  1715. @@:        bra    iocs_keysns_return_0
  1716.  
  1717. not_sleep_exit:
  1718. * }
  1719.         bsr    close_backscroll_window
  1720.         bsr    wait_release_ctrl_key
  1721.         bra    iocs_keysns_return_0
  1722.  
  1723. wait_release_ctrl_key:
  1724.         move.b    (option_p_flag,pc),d0
  1725.         beq    1f
  1726.         move.l    (past_pointer,pc),a0
  1727.         tst.b    (a0)
  1728.         beq    1f
  1729. @@:
  1730.         SFTbtst    SFT_CTRL
  1731.         bne    @b
  1732. 1:
  1733.         rts
  1734.  
  1735.  
  1736. * ^1 , ~ü½ , ~UNDO : ì┼îπé╠âJü[â\âïê╩Æué⌐éτâoâbâNâìâOé╔ôⁿéΘ
  1737. direct_key_backscroll_1:
  1738.         bsr    is_text_used
  1739.         beq    iocs_keysns_flush
  1740. wakeup_backscroll:
  1741.         bsr    check_backscroll_buffer
  1742.  
  1743.         move    (line_buf,pc),d0
  1744.         bmi    @f            ;ëƒé╡Åoé│éΩé─éóé╜Ä₧é═êΩö╘î├éóê╩Æué≡ò\Ī
  1745.  
  1746.         bsr    reset_line_address_buf
  1747.         bra    into_backscroll_at_lastpos
  1748. @@:
  1749.         bsr    beginning_of_buffer_sub
  1750.         lea    (cursorX,pc),a0
  1751.         clr.l    (a0)+            ;cursorX/Xbyte
  1752.         clr    (a0)            ;cursorY
  1753.         bra    into_backscroll_at_top
  1754.  
  1755. end_of_buffer_sub:
  1756.         moveq    #-1,d2
  1757.         move    (window_line,pc),d1
  1758.         lea    (line_buf,pc),a3
  1759.         move    d1,d0
  1760. @@:
  1761.         move.l    d2,(a3)+        ;ìsâAâhâîâXâoâbâtâ@é≡ûäé▀éΘ
  1762.         dbra    d0,@b
  1763.  
  1764.         movea.l    (buffer_now,a6),a0
  1765.         .ifndef    __EOBCUR
  1766.         tst.b    (a0)
  1767.         beq    scroll_down_p_sub    ;ëⁿìsÆ╝îπé╚éτæOé╠ìsé▄é┼é≡ò\Īé╖éΘ
  1768.         .endif
  1769. scroll_down_loop:
  1770.         movea.l    a3,a1            ;a1=ì┼îπ+1
  1771.         lea    (-4,a1),a2        ;a2=ì┼îπ
  1772.         move    d1,d0
  1773.         subq    #1,d0
  1774. @@:
  1775.         move.l    -(a2),-(a1)        ;ë║é╔é╕éτé╖
  1776.         dbra    d0,@b
  1777.  
  1778.         move.l    a0,(a2)
  1779.         addq    #1,d2
  1780. scroll_down_p_sub:
  1781.         subq.l    #1,a0
  1782.         TopChk    a0
  1783.         moveq    #0,d0
  1784.         move.b    (a0),d0
  1785.         beq    end_of_buffer_end    ;é▒éΩéµéΦæOé╠ìsé═é╚éó
  1786.         suba    d0,a0
  1787.         subq.l    #1,a0
  1788.         TopChk    a0
  1789.  
  1790.         cmp    d1,d2            ìsÉö-1>ò\ĪìsÉö-1
  1791. *        bcs    scroll_down_loop
  1792.         blt    scroll_down_loop    d2=$ffffé╠Ä₧éαîJéΦò╘é╖
  1793. end_of_buffer_end:
  1794.         rts
  1795.  
  1796. reset_line_address_buf:
  1797.         movea.l    (line_buf,pc),a0
  1798. reset_line_address_buf_2:
  1799.         bsr    fill_line_address_buf
  1800.         move.l    a0,d0            ;âoâbâtâ@é¬ï≤é╠Ä₧é═æSé─-1é┼ûäé▀éΘ
  1801.         bpl    @f
  1802.         rts
  1803.  
  1804. beginning_of_buffer_sub:
  1805.         bsr    fill_line_address_buf
  1806.         movea.l    (buffer_old,a6),a0
  1807.         addq.l    #1,a0
  1808. set_line_address_loop:
  1809.         EndChk    a0
  1810. @@:
  1811.         moveq    #0,d0
  1812.         move.b    (a0),d0
  1813.         .ifndef    __EOBCUR
  1814.             beq    @f
  1815.         .endif
  1816.         move.l    a0,(a3)+
  1817.         addq.l    #1,a0
  1818.         adda    d0,a0
  1819.         EndChk2    a0
  1820.         tst.b    (a0)+
  1821.         dbeq    d1,set_line_address_loop
  1822. @@:
  1823.         rts
  1824.  
  1825. fill_line_address_buf:
  1826.         moveq    #-1,d2
  1827.         move    (window_line,pc),d1
  1828.         lea    (line_buf,pc),a3
  1829.         move    d1,d0
  1830.         movea.l    a3,a1
  1831. @@:
  1832.         move.l    d2,(a1)+
  1833.         dbra    d0,@b
  1834.         rts
  1835.  
  1836. draw_backscroll:
  1837.         lea    (line_buf,pc),a0
  1838.         movea.l    (text_address,pc),a2
  1839.         move    (window_line,pc),d2
  1840. draw_backscroll_loop:
  1841.         movea.l    (a0)+,a1
  1842.         bsr    draw_line
  1843.         lea    ($800,a2),a2
  1844.         dbra    d2,draw_backscroll_loop
  1845.         rts
  1846.  
  1847. * âoâbâNâXâNâìü[âïâEâBâôâhâEé≡ò\Īé╖éΘ -------- *
  1848.  
  1849. open_backscroll_window:
  1850.         bsr    swap_interrupt_address
  1851.         bsr    initialize_keypast_buffer
  1852.  
  1853.         lea    (bitflag,pc),a1
  1854.         bset    #BACKSCR_bit,(a1)
  1855.  
  1856.         btst    #SUSPEND_bit,(a1)
  1857.         bne    set_text_mode
  1858.  
  1859. * ÉVïKâIü[âvâôÄ₧
  1860.         lea    (TEXTPAL),a0
  1861.         lea    (text_pal_buff,pc),a1
  1862.         moveq    #16/2-1,d0
  1863. @@:
  1864.         move.l    (a0)+,(a1)+        ;âeâLâXâgâpâîâbâgæ╥ö≡
  1865.         dbra    d0,@b
  1866.  
  1867.         btst    #0,(option_m_flag,pc)
  1868.         beq    @f
  1869.  
  1870.         lea    (ms_ctrl_flag,pc),a0
  1871.         st    (a0)+
  1872.         move.b    (SKEYMOD),(a0)+        ;skeymod_save
  1873.         IOCS    _MS_STAT
  1874.         move.b    d0,(a0)            ;mscur_on_flag
  1875.  
  1876.         moveq    #0,d1
  1877.         IOCS    _SKEY_MOD        ;â\âtâgâLü[â{ü[âh/â}âEâXâJü[â\âïÅ┴ïÄ
  1878.         IOCS    _MS_CUROF
  1879. @@:
  1880.         btst    #1,(option_m_flag,pc)
  1881.         beq    @f
  1882.  
  1883.         move    #0<<8+32*4,d1
  1884.         move    d1,d2            ;æSëµû╩ò█æ╢
  1885.         moveq    #%1100,d3
  1886.         IOCS    _TXRASCPY
  1887. @@:
  1888.         btst    #2,(option_m_flag,pc)
  1889.         bne    @f
  1890.  
  1891.         moveq    #2,d2            ;âeâLâXâgÄgùpÅ≤ï╡é≡û│Äïé╡é╚éóé╚éτ
  1892.         bsr    gm_tgusemd_orig        ;ÄgùpÆåé╔É▌ÆΦé╖éΘ
  1893. @@:
  1894.  
  1895. * Graphic Maské╠automaské≡ï╓Ä~é╖éΘ(âoâbâNâXâNâìü[âïëµû╩é¬
  1896. * ò\Īé│éΩé─éóéΘè╘üAsuspend/sleepÆåéαé╕é┴é╞ï╓Ä~é╡é╜é▄é▄).
  1897.         lea    (gm_automask,pc),a0
  1898.         clr.b    (a0)
  1899.         GMcall    _GM_AUTO_STATE
  1900.         bne    @f
  1901.         swap    d0
  1902.         subq.b    #%10,d0
  1903.         bne    @f            ;î│é⌐éτï╓Ä~Å≤æ╘
  1904.         st    (a0)
  1905.         GMcall    _GM_AUTO_DISABLE
  1906. @@:
  1907.  
  1908. set_text_mode:
  1909.         GMcall    _GM_MASK_STATE
  1910.         beq    @f
  1911.         moveq    #0,d0            ;gmé¬ÅφÆôé╡é─éóé╚éóé╚éτÅφé╔maské╚é╡
  1912. @@:        swap    d0
  1913.         lea    (general_work,pc),a1
  1914.         move.b    d0,(gm_maskflag-general_work,a1)
  1915.  
  1916.         move    (text_pal_buff,pc),d1    ;âpâîâbâg0(òWÅÇé┼ìò)
  1917.         move    (text_pal_buff+3*2,pc),d2     3(üV     öÆ)
  1918.  
  1919. *        lea    (general_work,pc),a1
  1920.         move.l    a1,-(sp)
  1921.         clr.l    -(sp)
  1922.         pea    (condrv_pal,pc)
  1923.         DOS    _GETENV
  1924.         addq.l    #12-4,sp
  1925.         move.l    d0,(sp)+
  1926.         bmi    @f
  1927.  
  1928.         bsr    get_palette        ;ò╢ÄÜÉF
  1929.         move    d1,d2
  1930.         bsr    get_palette        ;öwîiÉF
  1931. @@:
  1932.         lea    (TEXTPAL+2*4),a1
  1933.         bsr    set_text_palette    ;%01xx
  1934.  
  1935.         move    d2,d1
  1936.         addq.l    #2*4,a1
  1937.         bsr    set_text_palette    ;%11xx
  1938.  
  1939.         bsr    clear_text_plane    ;âoâbâNâìâOëµû╩ôhéΦé┬é╘é╡
  1940.         bsr    draw_window_tipline    ;ÅπÆ[é╞ë║Æ[é╠ëíÉⁿé≡ò`é¡
  1941.  
  1942.         lea    (cursor_blink_count,pc),a0
  1943.         clr    (a0)+
  1944.         move    (CSRSWITCH),(a0)    ;iocs_curflg
  1945.         btst    #3,(option_m_flag,pc)
  1946.         bne    @f
  1947.         IOCS    _OS_CUROF
  1948. @@:
  1949.         .ifdef    __EMACS
  1950.             rts
  1951.         .else
  1952.             bra    clr_ins_led
  1953.         .endif
  1954.  
  1955. set_text_palette:
  1956.         .rept    4
  1957.         move    d1,(a1)+
  1958.         .endm
  1959.         rts
  1960.  
  1961.         .ifndef    __EMACS
  1962. restore_ins_led:
  1963.         bset    #LED_INS,(LEDSTAT)
  1964.         move.b    (ins_clr_flag,pc),d0
  1965.         bne    call_iocs_ledset    * INS LED é═ì┼Åëé⌐éτô_ôö
  1966. clr_ins_led:
  1967.         bclr    #LED_INS,(LEDSTAT)    * INS é≡Å┴é╖
  1968.         sne    (ins_clr_flag)
  1969. call_iocs_ledset:
  1970.         IOCS    _LEDSET
  1971.         rts
  1972.         .endif
  1973.  
  1974. * è┬ï½ò╧Éöé⌐éτâpâîâbâgÆlé≡ĵéΦÅoé╖
  1975. * in    a1.l =    è┬ï½ò╧Éö
  1976. * out    d1.w =    ÉöÆl
  1977. get_palette:
  1978.         moveq    #0,d0
  1979.         moveq    #0,d1
  1980.         lea    (ctype_table,pc),a0
  1981.         bra    get_palette_loop
  1982. get_palette_loop_2:
  1983.         cmpi.b    #SPACE,d0
  1984.         beq    get_palette_loop
  1985.         btst    #IS_HEX_bit,(a0,d0.w)
  1986.         beq    get_palette_end
  1987.         btst    #IS_DEC_bit,(a0,d0.w)
  1988.         bne    @f
  1989.         andi.b    #$df,d0        A-Fa-fé╠Ä₧é═'9'é╠îπé╔é╕éτé╖
  1990.         subq.b    #'A'-('9'+1),d0
  1991. @@:
  1992.         andi.b    #$f,d0
  1993.         lsl    #4,d1
  1994.         or    d0,d1
  1995. get_palette_loop:
  1996.         move.b    (a1)+,d0
  1997.         bne    get_palette_loop_2
  1998.         subq.l    #1,a1
  1999. get_palette_end:
  2000.         rts
  2001.  
  2002. * âoâbâNâìâOëµû╩ôhéΦé┬é╘é╡ -------------------- *
  2003.  
  2004. clear_text_plane:
  2005. usereg:        .reg    d0-d7/a0-a2
  2006.         PUSH    usereg
  2007.  
  2008.         lea    (CRTC_R21),a0
  2009.         move    (a0),-(sp)
  2010.         bclr    #0,(a0)
  2011.  
  2012.         movea.l    (text_address,pc),a1
  2013.         lea    ($200-$400,a1),a1    ;plane 3 âNâèâA
  2014.         bsr    fill_text_block_0
  2015.  
  2016.         adda.l    #$200-$20000,a1        ;plane 2 ôhéΦÆ╫é╡
  2017.         moveq    #-1,d1
  2018.         bsr    fill_text_block
  2019.  
  2020.         move    (sp)+,(a0)
  2021.  
  2022.         move    (text_ras_no,pc),d1
  2023.         subi    #$0201,d1
  2024.         move    (window_line,pc),d2
  2025.         addq    #3,d2
  2026.         lsl    #2,d2
  2027.         subq    #1,d2
  2028.         moveq    #%1100,d3
  2029.         IOCS    _TXRASCPY
  2030.  
  2031.         POP    usereg
  2032.         rts
  2033.  
  2034. fill_text_block_0:
  2035.         moveq    #0,d1
  2036. fill_text_block:
  2037.     .irp    reg,d2,d3,d4,d5,d6,d7,a2
  2038.         move.l    d1,reg
  2039.     .endm
  2040.         moveq    #16-1,d0
  2041. @@:
  2042.         movem.l    d1-d7/a2,-(a1)
  2043.         dbra    d0,@b
  2044.         rts
  2045.  
  2046. * ÅπÆ[é╞ë║Æ[é╠ëíÉⁿé≡ò`é¡ ---------------------- *
  2047.  
  2048. draw_window_tipline:
  2049.         movea.l    (text_address,pc),a1
  2050.         lea    (-4*128,a1),a0        ;Åπé╠Éⁿ
  2051.         moveq    #1,d0
  2052.         add    (window_line,pc),d0
  2053.         lsl    #4,d0            ;*16
  2054.         addq    #4,d0
  2055.         lsl.l    #7,d0            ;*128
  2056.         adda.l    d0,a1
  2057.  
  2058.         moveq    #WIDTH/4-1,d0
  2059.         moveq    #-1,d1
  2060. @@:
  2061.         move.l    d1,(a0)+
  2062.         move.l    d1,(a1)+
  2063.         dbra    d0,@b
  2064.         rts
  2065.  
  2066. * ê╚æOé╠âüâbâZü[âWò\Īìsé≡Å┴ïÄé╖éΘ ------------ *
  2067. * in    a4.l    window_line
  2068.  
  2069. clear_text_raster_mesline:
  2070.         move    (a4),d1            ;window_line
  2071.         add    -(a4),d1        ;down_line
  2072.         addq    #2+1,d1
  2073.         lsl    #2,d1
  2074.         bra    clear_text_raster_m4
  2075.  
  2076. * ÄwÆΦìsé≡Å┴ïÄé╖éΘ ---------------------------- *
  2077. * in    d1.w    âëâXâ^ö╘ìå(0ü`255)
  2078.  
  2079. clear_text_raster_m4:
  2080.         moveq    #-1,d0            ;maskéáéΦ
  2081.         moveq    #4-1,d2
  2082.         bra    clear_text_raster
  2083.  
  2084. * ÄwÆΦâëâXâ^âuâìâbâNé≡Å┴ïÄé╖éΘ ---------------- *
  2085. * âeâLâXâgò█æ╢âéü[âhé╚éτùáëµû╩é⌐éτò£ïAé╖éΘ
  2086. * in    d0.b    0:GMö±æ╬ë₧(Åφé╔æSÅ┴ïÄ) -1:GMæ╬ë₧(â}âXâNé≡é⌐é»éΘ)
  2087. *        âeâLâXâgò█æ╢âéü[âhorùáëµû╩ÄwÆΦé╠Ä₧û│ê╙ûí
  2088. *    d1.w    âëâXâ^ö╘ìå(0ü`255)
  2089. *    d2.w    âëâXâ^Éö-1
  2090.  
  2091. clear_text_raster:
  2092. usereg:        .reg    d1-d7/a0-a2
  2093.         PUSH    usereg
  2094.  
  2095.         tst.b    d1
  2096.         bmi    clear_text_raster_force_clear
  2097.         btst    #1,(option_m_flag,pc)
  2098.         beq    clear_text_raster_mask_clear
  2099.  
  2100.         move.b    d1,d0
  2101.         tas    d1            ;ùáëµû╩é⌐éτò\é╔âRâsü[
  2102.         lsl    #8,d1
  2103.         move.b    d0,d1
  2104.         addq    #1,d2
  2105.         bra    clear_text_raster_rascpy
  2106.  
  2107. clear_text_raster_force_clear:
  2108.         moveq    #0,d0            ;ùáëµû╩é═maské╡é╚éó
  2109. clear_text_raster_mask_clear:
  2110.         move.b    d1,-(sp)        ;!
  2111.         move    d2,-(sp)        ;!
  2112.  
  2113.         lea    (CRTC_R21),a0
  2114.         move    (a0),-(sp)
  2115.         move    #%1_1100_0000,(a0)
  2116.  
  2117.         move.b    d0,-(sp)
  2118.  
  2119.         addi    #($e60000+128*4)/(128*4),d1
  2120.         mulu    #128*4,d1
  2121.         movea.l    d1,a1
  2122.         bsr    fill_text_block_0    ;âvâîü[âô2/3é≡âNâèâAé╖éΘ
  2123.  
  2124.         move.b    (sp)+,d0
  2125.         and.b    (gm_maskflag,pc),d0
  2126.         beq    clear_text_raster_copy
  2127.  
  2128.         clr    (a0)            ;graphic maské≡é⌐é»éΘ
  2129.         moveq    #-1,d0
  2130.         moveq    #-1,d1
  2131.         moveq    #-1,d2
  2132.         moveq    #-1,d3
  2133.         moveq    #4-1,d4
  2134. @@:
  2135.         movem.l    d0-d3,(a1)
  2136.         movem.l    d0-d3,(80,a1)
  2137.         lea    (128,a1),a1
  2138.         dbra    d4,@b
  2139. clear_text_raster_copy:
  2140.         move    (sp)+,(a0)
  2141.  
  2142.         move    (sp)+,d2        ;!
  2143.         move    (sp),d1            ;!
  2144.         move.b    (sp)+,d1
  2145.         addq.b    #1,d1
  2146. clear_text_raster_rascpy:
  2147.         moveq    #%1100,d3
  2148.         IOCS    _TXRASCPY        ;ë║é╔òíÄ╩é╖éΘ
  2149.  
  2150.         POP    usereg
  2151.         rts
  2152.  
  2153. * âoâbâNâXâNâìü[âïëµû╩é≡Å┴ïÄé╖éΘ -------------- *
  2154.  
  2155. close_backscroll_window:
  2156.         .ifndef    __EMACS
  2157.         lea    (mark_char_adr,pc),a0    ;â}ü[âNâNâèâA
  2158.         move.l    (a0),d3
  2159.         clr.l    (a0)+            ;mark_char_adr
  2160.         clr.l    (a0)+            ;mark_line_adr
  2161.         .endif
  2162.  
  2163.         btst    #2,(option_m_flag,pc)
  2164.         bne    @f
  2165.                         ;âeâLâXâgÄgùpÅ≤ï╡é≡û│Äïé╡é╚éóé╚éτ
  2166.         bsr    gm_tgusemd_orig_tm1    ;âVâXâeâÇé┼ÄgùpÆåé╔É▌ÆΦé╖éΘ
  2167. @@:
  2168.         .ifdef    __EMACS
  2169.         btst    #SUSPEND_bit,(bitflag,pc)
  2170.         bne    dont_restore_text
  2171.         bra    restore_text
  2172.         .else
  2173.         btst    #SUSPEND_bit,(bitflag,pc)
  2174.         beq    restore_text
  2175. * ctrl-undo {
  2176.         tst.l    d3
  2177.         beq    @f
  2178.         bsr    draw_backscroll        ;â}ü[âNë≡Å£Å≤æ╘é┼ò`é½Æ╝é╖
  2179. @@:
  2180.         bra    dont_restore_text
  2181. * }
  2182.         .endif
  2183. restore_text:
  2184.         btst    #1,(option_m_flag,pc)
  2185.         bne    restore_text_from_backside
  2186.  
  2187.         moveq    #-1,d0            ;maskéáéΦ
  2188.         move    (down_line,pc),d1
  2189.         lsl    #2,d1
  2190.         move    (window_line,pc),d2
  2191.         addq    #3,d2
  2192.         lsl    #2,d2
  2193.         subq    #1,d2
  2194.         bra    @f
  2195. restore_text_from_backside:
  2196.         move    #32*4<<8+0,d1        ;-m2ÄwÆΦÄ₧é═ùáTVRAMé⌐éτâRâsü[
  2197.         move    #32*4,d2
  2198.         moveq    #%1100,d3
  2199.         IOCS    _TXRASCPY
  2200.  
  2201.         moveq    #0,d0
  2202.         move    #32*4,d1
  2203.         moveq    #32*4-1,d2
  2204. @@:
  2205.         bsr    clear_text_raster    ;ò\orùáëµû╩Å┴ïÄ
  2206.  
  2207.         lea    (ms_ctrl_flag,pc),a0
  2208.         tst.b    (a0)
  2209.         beq    mouse_ctrl_off
  2210.  
  2211.         clr.b    (a0)+
  2212.  
  2213.         moveq    #0,d1
  2214.         move.b    (a0)+,d1        ;skeymod_save
  2215.         IOCS    _SKEY_MOD        ;â\âtâgâLü[â{ü[âhé╠Å≤æ╘é≡û▀é╖
  2216.  
  2217.         tst.b    d1
  2218.         bmi    @f
  2219.         tst.b    (a0)            ;mscur_on_flag
  2220.         beq    @f
  2221.  
  2222.         IOCS    _MS_CURON
  2223. @@:
  2224. mouse_ctrl_off:
  2225.         lea    (text_pal_buff,pc),a0
  2226.         lea    (TEXTPAL),a1
  2227.         moveq    #16/2-1,d0
  2228. @@:
  2229.         move.l    (a0)+,(a1)+
  2230.         dbra    d0,@b
  2231.  
  2232.         move.b    (gm_maskflag,pc),d0
  2233.         beq    @f
  2234.         GMcall    _GM_MASK_SET
  2235. @@:
  2236.  
  2237. * Graphic Maské╠automaské≡ï╓Ä~é╡é─éóé╜ÅΩìçüAïûë┬Å≤æ╘é╔û▀é╖.
  2238. * (suspendé╡é╜ÅΩìçé═û▀é│é╚éó. sleepéαô»é╢)
  2239.         move.b    (gm_automask,pc),d0
  2240.         beq    @f
  2241.         GMcall    _GM_AUTO_ENABLE
  2242. @@:
  2243.  
  2244. dont_restore_text:
  2245.         .ifndef    __EMACS
  2246.             bsr    restore_ins_led
  2247.         .endif
  2248.         btst    #3,(option_m_flag,pc)
  2249.         bne    @f
  2250.         move    (iocs_curflg,pc),(CSRSWITCH)
  2251. @@:
  2252.         lea    (bitflag,pc),a0
  2253.         bclr    #BACKSCR_bit,(a0)
  2254.         bra    swap_interrupt_address
  2255.  
  2256. swap_interrupt_address:
  2257.         lea    (TIMERA_VEC),a0
  2258.         lea    (vdisp_int_adr,pc),a1    ;ÉéÆ╝ô»è·èäéΦì₧é▌é┼âtâbâNé╖éΘâAâhâîâX
  2259.         bsr    swap_interrupt_address_sub
  2260.  
  2261.         lea    (CIRQ_VEC),a0
  2262.         lea    (ras_int_adr,pc),a1    ;âëâXâ^èäéΦì₧é▌é┼âtâbâNé╖éΘâAâhâîâX
  2263. swap_interrupt_address_sub:
  2264.         move.l    (a1),d0
  2265.         beq    @f            ;û│î°é╔é╡é╚éó
  2266.  
  2267.         move.l    (a0),(a1)
  2268.         move.l    d0,(a0)
  2269. @@:        rts
  2270.  
  2271.  
  2272. * âoâbâNâìâOôαé╠âLü[ôⁿù═âTâuâïü[â`âô ---------- *
  2273.  
  2274. * next-line é╚é╟é┼êΩÄ₧ôIé╔ÆZéóìsü`Æ╖éóìsé╞ê┌ô«é╡é╜Ä₧üA
  2275. * âJü[â\âïê╩Æué═ì┼Åëé╠ìsé╞ô»é╢îàé╔ê┌ô«é│é╣éΘ.
  2276. * é▒é╠ê╫é╔î╗ì▌é╠ CursorX é≡ì┼Åëé╠ê╩Æué╞é╡é─ïLë»é╖éΘ.
  2277. * é╜é╛é╡üAnext-lineüAprevious-lineüAnext-pageüAprevious-page
  2278. * é╚é╟é═ïLë»é╡é─éóéΘîàê╩Æué≡é╗é╠é▄é▄é╔é╡é─é¿é¡.
  2279.  
  2280. keyinp_loop_start:
  2281. keyinp_loop2:
  2282.         lea    (curx_save_flag,pc),a0
  2283.         tas    (a0)
  2284.         bne    @f            ;îàê╩Æué═é╗é╠é▄é▄
  2285.         move    (cursorX,pc),(curx_save-curx_save_flag,a0)
  2286. @@:
  2287. keyinp_loop:
  2288.         bsr    blink_cursor
  2289.         bsr    call_orig_b_keysns
  2290. **        tst.l    d0
  2291. **        beq    keyinp_loop
  2292. * sleepæ╬ë₧ {
  2293.         tst.l    d0
  2294.         bne    @f
  2295.         btst    #OPT_BG_bit,(option_flag,pc)
  2296.         beq    keyinp_loop
  2297.         lea    (bitflag,pc),a0
  2298.         tst.b    (a0)
  2299.         bmi    keyinp_loop        ;helpÆå
  2300.  
  2301.         bset    #SUSPEND_bit,(a0)    ;âoâbâNâXâNâìü[âïé⌐éτö▓é»éΘ
  2302.         st    (sleep_flag-bitflag,a0)
  2303.         rts
  2304. @@:
  2305. * }
  2306.         cmpi    #KEY_SHIFT.shl.8,d0
  2307.         bcc    @f
  2308.         move.l    (mes_end_adr,pc),d0    ;âGâëü[âüâbâZü[âWé≡ò\Īé╡é─éóé╜éτ
  2309.         beq    @f            ;ăé╠âLü[é¬ôⁿù═é│éΩé╜Ä₧é╔Å┴é╖
  2310.         bsr    clear_message
  2311. @@:
  2312.         pea    (keyinp_loop2,pc)    ê╚îπé═âïü[âvé╖éΘÄ₧é═ rts
  2313.         bsr    call_orig_b_keyinp
  2314.  
  2315.         move    d0,-(sp)        âLü[âoâbâtâ@é¬é╜é▄é┴é─éóé╚éóé⌐Æ▓é╫éΘ
  2316.         bsr    call_orig_b_keysns
  2317.         move    (sp),d1
  2318.         cmp    d0,d1
  2319.         bne    @f            êßéñâLü[é¬ëƒé│éΩé─éóéΘÅΩìçéαOK
  2320.  
  2321.         lsr    #8,d1
  2322.         move    d1,d0
  2323.         lsr    #3,d0
  2324.         lea    (KEYSTAT),a0
  2325.         adda    d0,a0
  2326.         btst    d1,(a0)
  2327.         bne    @f            ô»é╢âLü[é¬é▄é╛ëƒé│éΩé─éóéΘ
  2328.  
  2329.         bsr    keybuf_clear
  2330. @@:
  2331.         .ifdef    __EMACS
  2332.  
  2333. PREFIX_ESC:    .equ    7
  2334. PREFIX_CTRL_X:    .equ    6
  2335.  
  2336. keyinp_direct:
  2337.         move    (sp)+,d0
  2338.         move.b    ($80e),d0
  2339.         lea    (prefix_flag,pc),a0
  2340.         or.b    (a0),d0
  2341.         KEYbtst    KEY_XF3
  2342.         beq    @f
  2343.         tas    d0        *    bset    #PREFIX_ESC,d0
  2344. @@:
  2345.         rol    #8,d0
  2346. *        cmpi.b    #KEY_SHIFT,d0
  2347.         cmpi.b    #$6d,d0
  2348.         bcc    keycheck_end        ;shift/ctrl/opt.1&2 or ùúé╡é╜Ä₧é═û│Äï
  2349.         cmpi.b    #KEY_BREAK,d0
  2350.         bcc    @f
  2351.         cmpi.b    #KEY_XF1,d0
  2352.         bcc    keycheck_end        ;xf1ü`5/LEDâLü[é═û│Äï
  2353. @@:
  2354.         clr.b    (a0)
  2355.  
  2356.         lea    (emacs_key_table,pc),a0
  2357.         bsr    keycheck        ;braé╔é╡é╚éóÄû!
  2358. keycheck_end:
  2359.         rts
  2360.  
  2361.         .else
  2362.  
  2363.         moveq    #0,d0
  2364.         move.b    (sp)+,d0
  2365.         move.b    (option_o_flag,pc),d1    0:Shift 1:CTRL 2:OPT.1 3:OPT.2
  2366.         btst    d1,(SFTSTAT)
  2367.         beq    is_key_ctrl
  2368. * OPT.1în
  2369.         lea    (opt_key_table,pc),a0
  2370.         bsr    keycheck
  2371.         move.b    (option_o_flag,pc),d1
  2372.         subq.b    #2,d1
  2373.         bcc    keycheck_end        -o1,2 é╚éτÅIéφéΦ
  2374. is_key_ctrl:
  2375.         SFTbtst    SFT_CTRL
  2376.         bne    check_ctrl_key
  2377. * âVâtâgîné╚é╡
  2378.         lea    (nomal_key_table,pc),a0
  2379.         SFTbtst    SFT_SHIFT
  2380.         beq    @f
  2381. * Shiftîn
  2382.         lea    (shift_key_table,pc),a0
  2383.         bra    @f
  2384. * CTRLîn
  2385. check_ctrl_key:
  2386.         lea    (ctrl_key_table,pc),a0
  2387.         bsr    keycheck
  2388.         lea    (ctrl_key_table_2,pc),a0
  2389. @@:
  2390.         bsr    keycheck        òKé╕bsr
  2391. keycheck_end:
  2392.         rts
  2393.  
  2394.         .endif
  2395. * ïñÆ╩òöò¬ {
  2396.  
  2397. keycheck:
  2398.         move    (a0)+,d1        address/flag
  2399.         .ifdef    __EMACS
  2400.             beq    visual_bell
  2401.         .else
  2402.             beq    keycheck_end
  2403.         .endif
  2404.         cmp    (a0)+,d0        keycode
  2405.         bne    keycheck
  2406.  
  2407.         bclr    #0,d1
  2408.         seq    (curx_save_flag)
  2409.         adda    d1,a0
  2410.         move.l    a0,(sp)            ;î─é╤Åoé╡é╜é╞é▒éδé╔é═û▀éτé╚é¡é─éµéó
  2411.         bra    clear_cursor
  2412.  
  2413. * flag = 1: âJü[â\âïê╩Æué≡ìXÉVé╖éΘ.
  2414. * flag = 0: î╗ì▌é╠âJü[â\âïê╩Æué═êΩÄ₧ôIé╚éαé╠é╞î⌐é╚é╡üAcurx_save é═ìXÉVé╡é╚éó.
  2415.  
  2416. KEYTBL:        .macro    keycode,flag,address
  2417.         .dc    (address-($+4)).or.flag,keycode
  2418.         .endm
  2419. KEYTBL_END:    .macro
  2420.         .dc    0
  2421.         .endm
  2422.  
  2423. * }
  2424.         .ifdef    __EMACS
  2425.  
  2426. * META  C-x  0  0  | OPT.2  OPT.1  CTRL  SHIFT
  2427.  
  2428. emacs_key_table:
  2429.         KEYTBL    KEY_ESC        ,0,key_prefix_meta
  2430.         KEYTBL    KEY_HELP    ,0,key_help
  2431.         KEYTBL    KEY_HOME    ,0,key_kill_condrv
  2432.         KEYTBL    KEY_UNDO    ,0,key_kill_condrv
  2433.         KEYTBL    KEY_Q        ,0,key_kill_condrv
  2434.         KEYTBL    KEY_CLR        ,0,key_kill_condrv
  2435.         KEYTBL    KEY_ü⌐        ,1,key_backward_char
  2436.         KEYTBL    KEY_B        ,1,key_backward_char
  2437.         KEYTBL    KEY_ü¿        ,1,key_forward_char
  2438.         KEYTBL    KEY_F        ,1,key_forward_char
  2439.         KEYTBL    KEY_ü¬        ,0,key_previous_line
  2440.         KEYTBL    KEY_P        ,0,key_previous_line
  2441.         KEYTBL    KEY_ü½        ,0,key_next_line
  2442.         KEYTBL    KEY_N        ,0,key_next_line
  2443.         KEYTBL    KEY_R_DOWN    ,0,key_scroll_down
  2444.         KEYTBL    KEY_R_UP    ,0,key_scroll_up
  2445.         KEYTBL    KEY_DEL        ,0,key_kill_region
  2446.         KEYTBL    KEY_CR        ,0,key_yank_current_word
  2447.         KEYTBL    KEY_K        ,0,key_yank_to_end_of_line
  2448.         KEYTBL    KEY_U        ,0,key_yank_from_beginning_of_line
  2449.         KEYTBL    KEY_TAB        ,0,key_toggle_past_header_tab
  2450.         KEYTBL    KEY_üF        ,0,key_toggle_past_header_colon
  2451.         KEYTBL    KEY_ü|        ,0,key_toggle_past_header_hyphen
  2452.         KEYTBL    KEY_F0        ,1,key_beginning_of_buffer
  2453.         KEYTBL    KEY_F1        ,1,key_end_of_buffer
  2454.         KEYTBL    KEY_ü^        ,1,key_search_forward
  2455.         KEYTBL    KEY_F3        ,1,key_search_forward
  2456.         KEYTBL    KEY_F4        ,1,key_search_forward_next
  2457. SHIFT:        .equ    %0000_0001.shl.8
  2458.         KEYTBL    SHIFT+KEY_T    ,1,key_beginning_of_page
  2459.         KEYTBL    SHIFT+KEY_B    ,1,key_end_of_page
  2460.         KEYTBL    SHIFT+KEY_üä    ,0,key_toggle_past_header_bracket
  2461.         KEYTBL    SHIFT+KEY_ü^    ,1,key_search_backward
  2462.         KEYTBL    SHIFT+KEY_F3    ,1,key_search_backward
  2463.         KEYTBL    SHIFT+KEY_F4    ,1,key_search_backward_next
  2464.         KEYTBL    SHIFT+KEY_N    ,1,key_search_backward_next
  2465. CTRL_:        .equ    %0000_0010.shl.8
  2466.         KEYTBL    CTRL_+KEY_X    ,0,key_prefix_ctrl_x
  2467.         KEYTBL    CTRL_+KEY_Z    ,0,key_suspend_condrv
  2468.         KEYTBL    CTRL_+KEY_UNDO    ,0,key_suspend_condrv
  2469.         KEYTBL    CTRL_+KEY_B    ,1,key_backward_char
  2470.         KEYTBL    CTRL_+KEY_F    ,1,key_forward_char
  2471.         KEYTBL    CTRL_+KEY_P    ,0,key_previous_line
  2472.         KEYTBL    CTRL_+KEY_N    ,0,key_next_line
  2473.         KEYTBL    CTRL_+KEY_A    ,1,key_beginning_of_line
  2474.         KEYTBL    CTRL_+KEY_E    ,1,key_end_of_line
  2475.         KEYTBL    CTRL_+KEY_R_DOWN,1,key_beginning_of_buffer_mark
  2476.         KEYTBL    CTRL_+KEY_R_UP    ,1,key_end_of_buffer_mark
  2477.         KEYTBL    CTRL_+KEY_V    ,0,key_scroll_up
  2478.         KEYTBL    CTRL_+KEY_SPACE    ,1,key_set_mark
  2479.         KEYTBL    CTRL_+KEY_W    ,0,key_kill_region
  2480.         KEYTBL    CTRL_+KEY_Y    ,0,key_yank_region
  2481.         KEYTBL    CTRL_+KEY_ü¬    ,0,key_shrink_window
  2482.         KEYTBL    CTRL_+KEY_ü½    ,0,key_grow_window
  2483.         KEYTBL    CTRL_+KEY_ü⌐    ,0,key_move_window_up
  2484.         KEYTBL    CTRL_+KEY_ü¿    ,0,key_move_window_down
  2485.         KEYTBL    CTRL_+KEY_K    ,0,key_kill_to_end_of_line
  2486.         KEYTBL    CTRL_+KEY_U    ,0,key_kill_from_beginning_of_line
  2487.         KEYTBL    CTRL_+KEY_S    ,1,key_isearch_forward
  2488.         KEYTBL    CTRL_+KEY_R    ,1,key_isearch_backward
  2489.         KEYTBL    CTRL_+KEY_üO    ,1,key_search_forward_current_word
  2490.         KEYTBL    CTRL_+KEY_ü_    ,1,key_search_backward_current_word
  2491.         KEYTBL    CTRL_+KEY_I    ,0,key_toggle_past_header_tab
  2492.         KEYTBL    CTRL_+KEY_BS    ,0,key_toggle_buffering_mode
  2493.         KEYTBL    CTRL_+KEY_CLR    ,1,key_clear_buffer
  2494.         KEYTBL    CTRL_+KEY_L    ,1,key_redraw_window
  2495.         KEYTBL    CTRL_+KEY_üm    ,0,key_prefix_meta
  2496.         KEYTBL    CTRL_+KEY_üù    ,0,key_prefix_meta    ;ASCIIözù±ùp
  2497. C_X:        .equ    %0100_0000.shl.8
  2498.         KEYTBL    C_X+KEY_I    ,1,key_insert_file
  2499.         KEYTBL    C_X+KEY_W    ,1,key_write_file
  2500.         KEYTBL    C_X+KEY_Z    ,0,key_grow_window
  2501.         KEYTBL    C_X+KEY_M    ,0,key_toggle_buffer_mode
  2502.         .ifdef    __BUF_POS
  2503. C_X_SFT:    .equ    C_X+SHIFT
  2504.         KEYTBL    C_X_SFT+KEY_ü|    ,0,key_buffer_position
  2505.         .endif
  2506. C_X_CTRL:    .equ    C_X+CTRL_
  2507.         KEYTBL    C_X_CTRL+KEY_I    ,1,key_insert_file
  2508.         KEYTBL    C_X_CTRL+KEY_W    ,1,key_write_file
  2509.         KEYTBL    C_X_CTRL+KEY_C    ,0,key_kill_condrv
  2510.         KEYTBL    C_X_CTRL+KEY_Z    ,0,key_shrink_window
  2511.         KEYTBL    C_X_CTRL+KEY_P    ,0,key_move_window_up
  2512.         KEYTBL    C_X_CTRL+KEY_N    ,0,key_move_window_down
  2513.         KEYTBL    C_X_CTRL+KEY_X    ,1,key_exchange_point_and_mark
  2514.         KEYTBL    C_X_CTRL+KEY_S    ,1,key_search_forward
  2515.         KEYTBL    C_X_CTRL+KEY_R    ,1,key_search_backward
  2516.         KEYTBL    C_X_CTRL+KEY_M    ,0,key_toggle_text_mode
  2517. META:        .equ    %1000_0000.shl.8
  2518.         KEYTBL    META+KEY_ESC    ,0,key_prefix_meta_cancel
  2519.         KEYTBL    META+KEY_SPACE    ,1,key_set_mark
  2520.         KEYTBL    META+KEY_üD    ,1,key_set_mark
  2521.         KEYTBL    META+KEY_Q    ,0,key_kill_condrv
  2522.         KEYTBL    META+KEY_B    ,1,key_backward_word
  2523.         KEYTBL    META+KEY_F    ,1,key_forward_word
  2524.         KEYTBL    META+KEY_V    ,0,key_scroll_down
  2525.         KEYTBL    META+KEY_W    ,0,key_copy_region
  2526.         KEYTBL    META+KEY_R_DOWN    ,0,key_slide_window_up
  2527.         KEYTBL    META+KEY_R_UP    ,0,key_slide_window_down
  2528.         KEYTBL    META+KEY_N    ,1,key_search_forward_next
  2529.         KEYTBL    META+KEY_I    ,0,key_toggle_tab_disp
  2530. S_META:        .equ    SHIFT+META
  2531.         KEYTBL    S_META+KEY_üH    ,0,key_help
  2532.         KEYTBL    S_META+KEY_üâ    ,1,key_beginning_of_buffer_mark
  2533.         KEYTBL    S_META+KEY_üä    ,1,key_end_of_buffer_mark
  2534.         KEYTBL    S_META+KEY_üû    ,0,key_toggle_cr_disp
  2535. C_META:        .equ    CTRL_+META
  2536.         KEYTBL    C_META+KEY_üm    ,0,key_prefix_meta_cancel
  2537.         KEYTBL    C_META+KEY_üù    ,0,key_prefix_meta_cancel    ;ASCIIözù±ùp
  2538.         KEYTBL    C_META+KEY_G    ,1,key_goto_mark
  2539.         KEYTBL_END
  2540.  
  2541. key_prefix_meta:
  2542.         lea    (prefix_meta_mes,pc),a1
  2543.         moveq    #PREFIX_ESC,d0
  2544.         bra    @f
  2545. key_prefix_ctrl_x:
  2546.         lea    (prefix_ctrlx_mes,pc),a1
  2547.         moveq    #PREFIX_CTRL_X,d0
  2548. @@:
  2549.         bsr    print_message
  2550.         lea    (prefix_flag,pc),a0
  2551.         bset    d0,(a0)
  2552. key_prefix_meta_cancel:
  2553.         rts
  2554.  
  2555.         .else
  2556. nomal_key_table:
  2557.         KEYTBL    KEY_ESC        ,0,key_kill_condrv
  2558.         KEYTBL    KEY_HOME    ,0,key_kill_condrv
  2559.         KEYTBL    KEY_UNDO    ,0,key_kill_region
  2560.         KEYTBL    KEY_R_UP    ,0,key_scroll_up
  2561.         KEYTBL    KEY_R_DOWN    ,0,key_scroll_down
  2562.         KEYTBL    KEY_A        ,1,key_backward_word
  2563.         KEYTBL    KEY_F        ,1,key_forward_word
  2564.         KEYTBL    KEY_ü¬        ,0,key_previous_line
  2565.         KEYTBL    KEY_ü½        ,0,key_next_line
  2566.         KEYTBL    KEY_ü⌐        ,1,key_backward_char
  2567.         KEYTBL    KEY_ü¿        ,1,key_forward_char
  2568.         KEYTBL    KEY_M        ,0,key_mark_change_led
  2569.         KEYTBL    KEY_INS        ,0,key_mark_dont_change_led
  2570.         KEYTBL    KEY_K        ,0,key_yank_to_end_of_line
  2571.         KEYTBL    KEY_O        ,0,key_kill_region
  2572.         KEYTBL    KEY_DEL        ,0,key_kill_region
  2573.         KEYTBL    KEY_CR        ,0,key_yank
  2574.         KEYTBL    KEY_ENTER    ,0,key_yank
  2575.         KEYTBL    KEY_U        ,0,key_yank_from_beginning_of_line
  2576.         KEYTBL    KEY_ü^        ,1,key_search_forward
  2577.         KEYTBL    KEY_F3        ,1,key_search_forward
  2578.         KEYTBL    KEY_N        ,1,key_search_forward_next
  2579.         KEYTBL    KEY_F4        ,1,key_search_forward_next
  2580.         KEYTBL    KEY_HELP    ,0,key_help
  2581.         KEYTBL    KEY_üF        ,0,key_toggle_past_header_colon
  2582.         KEYTBL    KEY_ü|        ,0,key_toggle_past_header_hyphen
  2583.         KEYTBL    KEY_TAB        ,0,key_toggle_past_header_tab
  2584.         KEYTBL    KEY_T        ,1,key_beginning_of_buffer
  2585.         KEYTBL    KEY_F0        ,1,key_beginning_of_buffer
  2586.         KEYTBL    KEY_B        ,1,key_end_of_buffer
  2587.         KEYTBL    KEY_F1        ,1,key_end_of_buffer
  2588.         KEYTBL    KEY_L        ,0,key_set_label
  2589.         KEYTBL    KEY_Q        ,0,key_toggle_buffer_mode
  2590. *        KEYTBL_END
  2591. ctrl_key_table_2:                * CTRL é≡ëƒé╡é─éαëƒé│é╚é¡é─éαô»é╢éαé╠
  2592.         KEYTBL    KEY_W        ,0,key_move_window_up
  2593.         KEYTBL    KEY_Z        ,0,key_move_window_down
  2594.         KEYTBL    KEY_E        ,0,key_previous_line
  2595.         KEYTBL    KEY_X        ,0,key_next_line
  2596.         KEYTBL    KEY_D        ,1,key_forward_char
  2597.         KEYTBL    KEY_S        ,1,key_backward_char
  2598.         KEYTBL    KEY_P        ,0,key_yank
  2599.         KEYTBL_END
  2600. opt_key_table:
  2601.         KEYTBL    KEY_ü⌐        ,0,key_move_window_up
  2602.         KEYTBL    KEY_ü¿        ,0,key_move_window_down
  2603.         KEYTBL    KEY_UNDO    ,0,key_suspend_condrv
  2604.         KEYTBL    KEY_R_UP    ,0,key_slide_window_down
  2605.         KEYTBL    KEY_R_DOWN    ,0,key_slide_window_up
  2606.         KEYTBL    KEY_ü¬        ,0,key_shrink_window
  2607.         KEYTBL    KEY_ü½        ,0,key_grow_window
  2608.         KEYTBL_END
  2609. ctrl_key_table:
  2610.         KEYTBL    KEY_üm        ,0,key_kill_condrv
  2611.         KEYTBL    KEY_R        ,0,key_scroll_down
  2612.         KEYTBL    KEY_C        ,0,key_scroll_up
  2613.         KEYTBL    KEY_T        ,1,key_beginning_of_page
  2614.         KEYTBL    KEY_B        ,1,key_end_of_page
  2615.         KEYTBL    KEY_A        ,1,key_beginning_of_line
  2616.         KEYTBL    KEY_F        ,1,key_end_of_line
  2617.         KEYTBL    KEY_K        ,0,key_kill_to_end_of_line
  2618.         KEYTBL    KEY_U        ,0,key_kill_from_beginning_of_line
  2619.         KEYTBL    KEY_N        ,1,key_search_backward_next
  2620.         KEYTBL    KEY_üù        ,1,key_write_file
  2621.         KEYTBL    KEY_J        ,0,key_help
  2622.         KEYTBL    KEY_ün        ,0,key_help
  2623.         KEYTBL    KEY_I        ,0,key_toggle_past_header_tab
  2624.         KEYTBL    KEY_Y        ,1,key_insert_file
  2625.         KEYTBL    KEY_Q        ,0,key_toggle_text_mode
  2626.         KEYTBL    KEY_üO        ,1,key_search_forward_current_word
  2627.         KEYTBL    KEY_ü_        ,1,key_search_backward_current_word
  2628.         KEYTBL    KEY_BS        ,0,key_toggle_buffering_mode
  2629.         KEYTBL    KEY_CLR        ,1,key_clear_buffer
  2630.         KEYTBL_END
  2631. shift_key_table:
  2632.         KEYTBL    KEY_ü^        ,1,key_search_backward
  2633.         KEYTBL    KEY_F3        ,1,key_search_backward
  2634.         KEYTBL    KEY_F4        ,1,key_search_backward_next
  2635.         KEYTBL    KEY_N        ,1,key_search_backward_next
  2636.         KEYTBL    KEY_üD        ,0,key_toggle_past_header_bracket
  2637.         KEYTBL    KEY_7        ,1,key_jump_label
  2638.         KEYTBL_END
  2639.  
  2640.         .endif
  2641.  
  2642. * âyü[âXâgâwâbâ_ò╧ìX
  2643. key_toggle_past_header_tab:
  2644.         moveq    #TAB,d0
  2645.         bra    @f
  2646. key_toggle_past_header_hyphen:
  2647.         moveq    #'-',d0
  2648.         bra    @f
  2649. key_toggle_past_header_colon:
  2650.         moveq    #':',d0
  2651.         bra    @f
  2652. key_toggle_past_header_bracket:
  2653.         move.b    (default_past_header,pc),d0
  2654. @@:
  2655.         lea    (past_header,pc),a0
  2656.         cmp.b    (a0),d0
  2657.         bne    @f
  2658.         moveq    #0,d0            è∙é╔É▌ÆΦé│éΩé─éóé╜éτĵéΦÅ┴é╡
  2659. @@:
  2660.         move.b    d0,(a0)
  2661.         bra    display_system_status
  2662.  
  2663. * â}ü[âN -------------------------------------- *
  2664.  
  2665.         .ifndef    __EMACS
  2666. key_mark_change_led:
  2667.         bchg    #LED_INS,(LEDSTAT)    * INS é╠ LED Å≤æ╘é≡ö╜ô]
  2668.         IOCS    _LEDSET
  2669. key_mark_dont_change_led:
  2670.         move.l    (mark_char_adr,pc),d0
  2671.         beq    key_set_mark
  2672. clear_mark_and_redraw:
  2673.         bsr    clear_mark
  2674.         bra    draw_backscroll
  2675.         .endif
  2676.  
  2677. clear_mark:
  2678.         lea    (mark_char_adr,pc),a0
  2679.         clr.l    (a0)+
  2680.         clr.l    (a0)
  2681.         .ifdef    __EMACS
  2682.             rts
  2683.         .else
  2684.             bclr    #LED_INS,(LEDSTAT)
  2685.             bra    call_iocs_ledset
  2686.         .endif
  2687.  
  2688. key_set_mark:
  2689.         .ifdef    __EMACS
  2690.             lea    (set_mark_mes,pc),a1
  2691.             bsr    print_message
  2692.         .endif
  2693. key_set_mark_quiet:
  2694.         bsr    get_cursor_line_buffer
  2695.         bpl    @f
  2696.  
  2697.         movea.l    (buffer_now,a6),a1    ;âoâbâtâ@é¬ï≤é╚éτâ_â~ü[é≡É▌ÆΦé╖éΘ
  2698. @@:
  2699.         lea    (mark_line_adr,pc),a0
  2700.         move.l    a1,(a0)
  2701.         adda    (cursorXbyte,pc),a1
  2702.         addq.l    #1,a1
  2703.         EndChk2    a1
  2704.         move.l    a1,-(a0)        ;mark_char_adr
  2705.  
  2706.         .ifndef    __EMACS
  2707.         bra    draw_backscroll
  2708.  
  2709.         .else
  2710. goto_mark_end:
  2711.         rts
  2712.  
  2713. key_exchange_point_and_mark:
  2714.         move.l    (mark_line_adr,pc),d1
  2715.         beq    no_mark_error
  2716.         move.l    (mark_char_adr,pc),d2
  2717.         bsr    key_set_mark_quiet
  2718. key_goto_mark_jump:
  2719.         movea.l    d2,a1
  2720.         sub.l    d1,d2
  2721.         subq    #1,d2
  2722.         bsr    search_zenkaku_check    ;îàê╩Æu(d3)é╠Ä√ô╛é╠é▌
  2723.         bra    search_found_scroll
  2724.  
  2725. key_goto_mark:
  2726.         move.l    (mark_line_adr,pc),d1
  2727.         beq    no_mark_error
  2728.         move.l    (mark_char_adr,pc),d2
  2729.         bra    key_goto_mark_jump
  2730.  
  2731.         .endif
  2732.  
  2733. * âoâbâNâXâNâìü[âïëµû╩ègæσüEÅkż -------------- *
  2734.  
  2735. * ~DOWN : âoâbâNâìâOëµû╩é≡ë║é╔ìLé░é─êΩìsæ¥éΓé╖
  2736. key_grow_window:
  2737.         move.b    (bitflag,pc),d0        HELPMODE_bit
  2738.         bmi    grow_window_end
  2739.  
  2740.         lea    (down_line,pc),a4
  2741.         move    (a4)+,d0        ë║é╔ê┌ô«é╡é╜ìsÉö
  2742.         add    (window_line-(down_line+2),a4),d0
  2743.         cmpi    #28,d0
  2744.         bcc    grow_window_end
  2745.  
  2746.         lsl    #2,d0            d0*4+(12-1) -> d0*4+(16-1)
  2747.         move.b    d0,-(sp)    *    move.b    d0,d1
  2748.         move    (sp)+,d1    *    lsl    #8,d1
  2749.         move.b    d0,d1
  2750.         addi    #(12-1).shl.8+(16-1),d1
  2751.         moveq    #(2+4),d0
  2752.         bsr    rascpy_down
  2753.  
  2754.         addq    #1,(a4)            ;window_line
  2755.         bsr    reset_line_address_buf
  2756.         lea    (line_buf,pc),a3
  2757.  
  2758.         move    (a4),d0
  2759.         bsr    draw_line_d0
  2760.         lsl    #2,d0
  2761.         tst.l    (a3,d0.w)
  2762.         bmi    key_move_window_up
  2763. grow_window_end:
  2764. shrink_window_end:
  2765.         rts
  2766.  
  2767. * ~UP : âoâbâNâìâOëµû╩é≡Åπé╔ï╖é▀é─êΩìsî╕éτé╖
  2768. key_shrink_window:
  2769.         move.b    (bitflag,pc),d0        ;HELPMODE_bit
  2770.         bmi    shrink_window_end
  2771.  
  2772.         lea    (window_line,pc),a4
  2773.         move    (a4),d0
  2774.         cmpi    #4,d0
  2775.         bcs    shrink_window_end
  2776.  
  2777.         lea    (cursorY,pc),a1
  2778.         cmp    (a1),d0
  2779.         bne    shrink_window_cursor_fixed
  2780.  
  2781.         lea    (line_buf,pc),a0    ;âJü[â\âïé¬ì┼ë║ìsé╔éáéΘÅΩìçé═
  2782.         lea    (4,a0),a2        ;âXâNâìü[âïâAâbâvé╖éΘ
  2783.         subq    #1,d0
  2784. @@:
  2785.         move.l    (a2)+,(a0)+
  2786.         dbra    d0,@b
  2787.         subq    #1,(a1)            cursorY
  2788.         bsr    rascpy_up_all
  2789. shrink_window_cursor_fixed:
  2790.         lea    (line_buf,pc),a3    ;âüâbâZü[âWò\Īìsé≡Åπé╔ê┌ô«é╖éΘ
  2791.         move    (a4),d0
  2792.         subq    #1,(a4)            ;window_line
  2793.         lsl    #2,d0
  2794.         st    (a3,d0.w)
  2795.         move    d0,d1
  2796.         addq    #4,d1
  2797.         lsl    #8,d1
  2798.         move.b    d0,d1
  2799.         moveq    #2+4,d0
  2800.         bsr    rascpy_up
  2801.  
  2802.         bra    clear_text_raster_mesline
  2803.  
  2804. * âoâbâNâXâNâìü[âïâEâBâôâhâEé╠ê┌ô« ------------ *
  2805.  
  2806. * ~ROLLDOWN : âoâbâNâìâOëµû╩é≡Åπé╔ê┌ô«é╖éΘ
  2807. key_slide_window_up:
  2808.         lea    (down_line,pc),a4
  2809.         move    (a4)+,d1
  2810.         beq    slide_window_up_end    ;é▒éΩê╚Åπê┌ô«é┼é½é╚éó
  2811.  
  2812.         move    #$fdfa,d1        ;@-2 -> @-2-4
  2813.         move    (a4),d0            ;window_line
  2814.         addq    #2+1,d0
  2815.         bsr    rascpy_up_shl2
  2816.  
  2817.         lea    (text_address,pc),a0
  2818.         subi.l    #$800,(a0)+
  2819.         subi    #$404,(a0)+
  2820.         subq    #1,(a0)+
  2821.  
  2822.         bra    clear_text_raster_mesline    ;ê╚æOé╠ì┼ë║ìsé≡Å┴ïÄé╖éΘ
  2823.  
  2824. * ~ROLLUP : âoâbâNâìâOëµû╩é≡ë║é╔ê┌ô«é╖éΘ
  2825. key_slide_window_down:
  2826.         move    (down_line,pc),d3
  2827.         move    (window_line,pc),d0
  2828.         add    d3,d0
  2829.         cmpi    #28,d0
  2830.         bcc    slide_window_down_end    ;é▒éΩê╚Åπê┌ô«é┼é½é╚éó
  2831.  
  2832.         addq    #3,d0
  2833.         lsl    #2,d0
  2834.         subq    #1,d0
  2835.         move.b    d0,-(sp)
  2836.         move    (sp)+,d1
  2837.         addq    #4,d0
  2838.         move.b    d0,d1
  2839.         move    (window_line,pc),d0
  2840.         addq    #3,d0
  2841.         lsl    #2,d0            ;(ìsÉö+2)*4
  2842.         bsr    rascpy_down
  2843.  
  2844.         moveq    #0,d1
  2845.         move.b    (text_ras_no,pc),d1
  2846.         subq    #2,d1
  2847.         bsr    clear_text_raster_m4    ;ê╚æOé╠ɵô¬ìsé≡Å┴ïÄé╖éΘ
  2848.  
  2849.         lea    (text_address,pc),a0
  2850.         addi.l    #$800,(a0)+
  2851.         addi    #$404,(a0)+
  2852.         addq    #1,(a0)+
  2853. slide_window_up_end:
  2854. slide_window_down_end:
  2855. write_cancel:
  2856.         rts
  2857.  
  2858. * --------------------------------------------- *
  2859.  
  2860. * ^@ : âtâ@âCâïÅæé½Åoé╡
  2861. key_write_file:
  2862.         lea    (write_file_prompt,pc),a1
  2863.         bsr    input_string
  2864.         beq    write_cancel
  2865.         bsr    unfold_home
  2866.         bsr    check_diskready
  2867.         bmi    disk_notready_error
  2868.  
  2869.         move    #1<<ARCHIVE,-(sp)
  2870.         move.l    a1,-(sp)
  2871.         DOS    _NEWFILE
  2872.         addq.l    #6,sp
  2873.         move.l    d0,d4
  2874.         bpl    write_file_status_check
  2875.  
  2876.         move    #WOPEN,-(sp)
  2877.         move.l    a1,-(sp)
  2878.         DOS    _OPEN
  2879.         addq.l    #6,sp
  2880.         move.l    d0,d4
  2881.         bmi    fileopen_error
  2882.  
  2883.         move    #2,-(sp)        Åæé½ì₧é▌âIü[âvâôé╡é╜ÅΩìçé═ûûö÷é╔âAâyâôâh
  2884.         clr.l    -(sp)
  2885.         move    d4,-(sp)
  2886.         DOS    _SEEK
  2887.         addq.l    #8,sp
  2888. write_file_status_check:
  2889.         moveq    #7,d1
  2890.         bsr    is_file_io_enable
  2891.         bne    filewrite_disable
  2892.  
  2893.         move.l    (mark_char_adr,pc),d0
  2894.         bne    write_file_mark_area
  2895.  
  2896.         moveq    #0,d0
  2897.         moveq    #0,d2
  2898.         movea.l    (buffer_old,a6),a0    ;â}ü[âNé╚é╡é╠Ä₧é═ì┼Åëé⌐éτì┼îπé▄é┼
  2899.         addq.l    #1,a0
  2900.         EndChk    a0
  2901.         move.b    (a0)+,d2
  2902.         EndChk    a0
  2903.         movea.l    (buffer_now,a6),a1
  2904.         tst.b    (a1)+
  2905.         beq    @f
  2906.  
  2907.         movea.l    (buffer_write,a6),a1
  2908.         addq.l    #2,a1            ëⁿìsÆ╝îπé┼é╚éóÅΩìçé═ï[ÄùôIé╚ăé╠ìsé≡æzÆΦé╖éΘ
  2909. @@:
  2910.         bra    write_file_loop_1
  2911.  
  2912. write_file_mark_area:
  2913.         bsr    get_mark_area
  2914.         beq    close_filehandle_d4
  2915. * d0    Äƒé╔ô]æùé╖éΘîàê╩Æu
  2916. * d1    âoâbâtâ@Åæé½ì₧é▌âoâCâgÉö
  2917. * d2    î╗ì▌ìsé╠îàÉö
  2918. * a0    âoâbâtâ@Æìû┌ô_
  2919. * a1    ÅIù╣âAâhâîâX
  2920. write_file_loop_1:
  2921.         lea    (io_buffer,pc),a2
  2922.         moveq    #0,d1
  2923. write_file_loop_2:
  2924.         cmp    d0,d2
  2925.         bne    @f
  2926.         addq.l    #1,a0            ;ăé╠ìs
  2927.         EndChk    a0
  2928.         moveq    #0,d0
  2929.         moveq    #0,d2
  2930.         move.b    (a0)+,d2
  2931.         EndChk    a0
  2932. @@:
  2933.         cmpa.l    a0,a1
  2934.         beq    write_file_end
  2935.         move.b    (a0)+,d3
  2936.         EndChk    a0
  2937.         cmpi.b    #CR,d3
  2938.         bne    @f
  2939.         moveq    #LF,d3
  2940. @@:
  2941.         move.b    d3,(a2)+
  2942.         addq    #1,d0
  2943.         addq    #1,d1
  2944.         cmpi    #IOBUFSIZE,d1
  2945.         bne    write_file_loop_2
  2946.         bsr    write_file_sub
  2947.         bra    write_file_loop_1
  2948.  
  2949. write_file_end:
  2950.         tst    d1
  2951.         beq    @f
  2952.         bsr    write_file_sub
  2953. @@:
  2954.         .ifndef    __EMACS
  2955.             bsr    clear_mark_and_redraw
  2956.         .endif
  2957.         bra    close_filehandle_d4
  2958.  
  2959. write_file_sub:
  2960.         move.l    d0,-(sp)
  2961.         move.l    d1,-(sp)
  2962.         pea    (io_buffer,pc)
  2963.         move    d4,-(sp)
  2964.         DOS    _WRITE
  2965.         lea    (10,sp),sp
  2966.         move.l    (sp)+,d0
  2967.         rts
  2968.  
  2969. * Éïăîƒì⌡ ------------------------------------ *
  2970.  
  2971.         .ifdef    __EMACS
  2972.  
  2973. wait_vdisp_vsync:
  2974.         btst    #4,(MFP_GPIP)
  2975.         beq    wait_vdisp_vsync
  2976. wait_vsync:
  2977.         btst    #4,(MFP_GPIP)
  2978.         bne    wait_vsync
  2979.         rts
  2980.  
  2981. visual_bell:
  2982.         lea    (2*(4+4)+TEXTPAL),a1
  2983.         move.l    -(a1),-(sp)        * öwîiÉFæ╥ö≡
  2984.         move.l    -(a1),-(sp)
  2985.         move    (2*(12-4),a1),d1    * ò╢ÄÜÉF
  2986.  
  2987.         bsr    wait_vsync
  2988.         bsr    set_text_palette
  2989.         subq.l    #4*2,a1
  2990.  
  2991.         bsr    wait_vdisp_vsync
  2992.  
  2993.         move.l    (sp)+,(a1)+        * öwîiÉFò£ïA
  2994.         move.l    (sp)+,(a1)+
  2995.         rts
  2996.  
  2997. call_dos_keyctrl_md0:
  2998.         moveq    #0,d0
  2999. call_dos_keyctrl:
  3000.         move    d0,-(sp)        * 0/1
  3001.         DOS    _KEYCTRL
  3002.         move    d0,(sp)+
  3003.         rts
  3004.  
  3005.         .offset    0
  3006. isch_strptr:    .ds.l    1
  3007. isch_direct:    .ds.b    1            ;$00:forward $ff:backward
  3008. isch_inpmod:    .ds.b    1            ;$00:Æ╩Åφ $ff:C-q/C-vé╠Æ╝îπ
  3009.  
  3010. isch_save_line:    .ds.l    1            ;îƒì⌡èJÄnæOé╠âJü[â\âïê╩Æu
  3011. isch_save_cx:    .ds    1
  3012. isch_save_cxb:    .ds    1
  3013. isch_save_cy:    .ds    1
  3014. sizeof_isch:
  3015.         .text
  3016.  
  3017. * æOò√Éïăîƒì⌡
  3018. key_isearch_forward:
  3019.         moveq    #0,d0
  3020.         bra    @f
  3021. * îπò√Éïăîƒì⌡
  3022. key_isearch_backward:
  3023.         move    #$ff<<8,d0
  3024. @@:
  3025.         move    (cursorY,pc),-(sp)
  3026.         move.l    (cursorX,pc),-(sp)    ;cursorX/Xbyte
  3027.         move.l    (line_buf,pc),-(sp)
  3028.  
  3029.         move    d0,-(sp)        ;isch_direct/inpmod
  3030.         clr.l    -(sp)            ;isch_strptr
  3031.  
  3032. * ì─ÆΦï`ë┬ö\é╚âLü[é╠ôαùeé≡ò╧ìXé╖éΘ
  3033.         pea    (fnckey_buf,pc)
  3034.         clr    -(sp)            Ä√ô╛
  3035.         DOS    _FNCKEY
  3036.         addq.l    #6,sp
  3037.  
  3038.         lea    (ise_fnc_tbl,pc),a0
  3039.         bra    isearch_setfnc
  3040. isearch_setfnc_loop:
  3041.         move.l    a0,-(sp)
  3042.         move    d0,-(sp)
  3043.         DOS    _FNCKEY
  3044.         addq.l    #6,sp
  3045. @@:
  3046.         tst.b    (a0)+
  3047.         bne    @b
  3048. isearch_setfnc:
  3049.         move    #$01_00,d0        É▌ÆΦ
  3050.         move.b    (a0)+,d0
  3051.         bne    isearch_setfnc_loop
  3052.  
  3053.         .if    0
  3054.         bsr    gm_inactive
  3055.         .endif
  3056.         bsr    fep_enable
  3057.  
  3058. * general_work:    .dc.b    'isearch ['
  3059. *        .dc.b    æOë±îƒì⌡ò╢ÄÜù±
  3060. *        .dc.b    ']:'
  3061. * (isch_strptr,sp) ->
  3062. *        .dc.b    îƒì⌡ò╢ÄÜù±
  3063.  
  3064.         lea    (general_work,pc),a1
  3065.         clr.l    (search_char_adr-general_work,a1)
  3066.         lea    (isearch_mes_1,pc),a0    ;"isearch ["
  3067.         bsr    str_copy
  3068.         lea    (isearch_string_buf,pc),a0
  3069.         bsr    str_copy
  3070.         lea    (isearch_mes_2,pc),a0    ;"]:"
  3071.         bsr    str_copy
  3072.         move.l    a1,(isch_strptr,sp)    ;îƒì⌡ò╢ÄÜù±âoâbâtâ@é╠âAâhâîâX
  3073.  
  3074. isearch_redraw_loop:
  3075.         lea    (general_work,pc),a1
  3076.         bsr    print_message
  3077.         bra    isearch_loop
  3078. isearch_bell:
  3079.         bsr    visual_bell
  3080. isearch_loop:
  3081.         bsr    blink_cursor
  3082.         moveq    #1,d0
  3083.         bsr    call_dos_keyctrl
  3084.         beq    isearch_loop
  3085.         bsr    call_dos_keyctrl_md0
  3086.         beq    isearch_loop        öOé╠ê╫
  3087.  
  3088.         bsr    clear_cursor
  3089. *** ÉºîΣïLìåé╠îƒì╕ ***
  3090.         move.b    d0,d1
  3091.         addq.b    #1,d1
  3092.         beq    isearch_fnckey        âJü[â\âïôÖé╛é┴é╜ÅΩìç(C-qéµéΦɵé╔î⌐éΘ)
  3093.  
  3094.         tst.b    (isch_inpmod,sp)
  3095.         bne    isearch_next_char    C-q,C-vé╠Æ╝îπ
  3096.  
  3097.         lea    (isearch_table,pc),a0
  3098. @@:
  3099.         move    (a0)+,d1
  3100.         beq    @f
  3101.         cmp    (a0)+,d0
  3102.         bne    @b
  3103.         adda    d1,a0
  3104.         jmp    (a0)
  3105. @@:
  3106.         cmpi    #$20,d0            âoâCâôâhé│éΩé─éóé╚éóɺîΣïLìåé¬ôⁿù═é│éΩé╜
  3107.         bcs    isearch_exit        Ä₧é═Éïăîƒì⌡é⌐éτö▓é»é─ò]ë┐é╖éΘ
  3108. isearch_next_char:
  3109.         clr.b    (isch_inpmod,sp)
  3110.         movea.l    (isch_strptr,sp),a0
  3111.         bsr    get_isearch_strlen
  3112.  
  3113.         lea    (ctype_table,pc),a2
  3114.         tst.b    (a2,d0.w)        MULTIBYTE
  3115.         bmi    isearch_mb
  3116. * isearch_single_byte_code:
  3117.         tst.b    d0
  3118.         bmi    isearch_sb        ö╝èpò╨ë╝û╝
  3119.         KEYbtst    KEY_XF3
  3120.         beq    isearch_sb
  3121.         cmpi.b    #$40,d0
  3122.         bmi    @f
  3123.         andi.b    #$1f,d0
  3124. @@:
  3125.         bra    isearch_exit        Meta+??
  3126. isearch_mb:
  3127.         lsl    #8,d0
  3128.         move    d0,-(sp)
  3129.         bsr    call_dos_keyctrl_md0    2byteû┌é≡ĵéΦÅ£é¡
  3130.         or    (sp)+,d0        High/Low
  3131. isearch_mb_2:
  3132.         cmpi    #GETSMAX-1,d1
  3133.         bcc    isearch_bell
  3134.  
  3135.         move    d0,-(sp)        Åπê╩âoâCâg
  3136.         move.b    (sp)+,(a0)+
  3137.         tst.b    d0
  3138.         bne    isearch_sb_2
  3139.  
  3140.         clr.b    -(a0)            $??_00é═û│Äï
  3141.         bra    isearch_loop
  3142. isearch_sb:
  3143.         cmpi    #GETSMAX,d1
  3144.         bcc    isearch_bell
  3145. isearch_sb_2:
  3146.         move.b    d0,(a0)+        ë║ê╩âoâCâg
  3147.         clr.b    (a0)
  3148.  
  3149.         bsr    print_message_cont
  3150. isearch_search_next0:
  3151.         lea    (bitflag,pc),a1        ;ìíôxé╠îƒì⌡é═âJü[â\âïê╩ÆuÄßé╡é¡é═
  3152.         bset    #ISEARCH_bit,(a1)    ;î⌐é┬é⌐é┴é╜ò╢ÄÜù±é╠ɵô¬é⌐éτèJÄné╖éΘ
  3153. isearch_search_next:
  3154.         movea.l    (isch_strptr,sp),a1
  3155.         tst.b    (a1)
  3156.         bne    @f
  3157.         lea    (isearch_string_buf,pc),a1
  3158. @@:
  3159.         bsr    make_search_work_a1
  3160.         beq    isearch_loop        ;îƒì⌡ò╢ÄÜù±é¬ï≤
  3161.         tst.b    (isch_direct,sp)
  3162.         bne    isearch_search_backward
  3163.  
  3164.         bsr    i_search_forward_main
  3165.         bra    @f
  3166. isearch_search_backward:
  3167.         bsr    i_search_backward_main
  3168. @@:
  3169.         bmi    isearch_bell        ;îƒì⌡Ä╕ös
  3170.         bra    isearch_loop
  3171.  
  3172. ;öCê╙É▌ÆΦé¬ë┬ö\é╚âLü[é╠Åêù¥
  3173. isearch_fnckey:
  3174.         bsr    call_dos_keyctrl_md0
  3175.         beq    isearch_loop
  3176.         cmpi    #11,d0
  3177.         bhi    isearch_loop
  3178.         add    d0,d0
  3179.  
  3180.         move.b    (SFTSTAT),d1
  3181.         KEYbtst    KEY_XF3
  3182.         beq    @f
  3183.  
  3184.         lea    (key_slide_window_down,pc),a0
  3185.         subq    #4,d0            ;2/4é╠é▌bindé│éΩé─éóéΘ
  3186.         bhi    isearch_loop
  3187.         bmi    isearch_fnckey_jump
  3188.         lea    (key_slide_window_up,pc),a0
  3189.         bra    isearch_fnckey_jump
  3190. @@:
  3191.         lea    (isearch_fnckey_normal,pc),a0
  3192.         bclr    #SFT_CTRL,d1
  3193.         beq    @f
  3194.         lea    (isearch_fnckey_ctrl,pc),a0
  3195. @@:
  3196.         move    (-2,a0,d0.w),d0
  3197.         beq    isearch_loop
  3198.         adda    d0,a0
  3199. isearch_fnckey_jump:
  3200.         tst.b    d1
  3201.         bne    isearch_loop
  3202. isearch_fnckey_exit:
  3203.         movea.l    (isch_strptr,sp),a1
  3204.         lea    (sizeof_isch,sp),sp
  3205.         move.l    a0,-(sp)
  3206.         bra    isearch_end
  3207.  
  3208. isearch_fnckey_normal:
  3209. @@:        .dc    key_scroll_up-@b    ROLL UP
  3210.         .dc    key_scroll_down-@b    ROLL DOWN
  3211.         .dc    key_kill_region-@b    DEL
  3212.         .dc    key_previous_line-@b    ü¬
  3213.         .dc    key_backward_char-@b    ü⌐
  3214.         .dc    key_forward_char-@b    ü¿
  3215.         .dc    key_next_line-@b    ü½
  3216.         .dc    0            CLR
  3217.         .dc    key_help-@b        HELP
  3218.         .dc    key_kill_condrv-@b    HOME
  3219.         .dc    key_kill_condrv-@b    UNDO
  3220.  
  3221. isearch_fnckey_ctrl:
  3222. @@:        .dc    key_end_of_buffer_mark-@b    ROLL UP
  3223.         .dc    key_beginning_of_buffer_mark-@b    ROLL DOWN
  3224.         .dc    0            DEL
  3225.         .dc    key_shrink_window-@b    ü¬
  3226.         .dc    key_move_window_up-@b    ü⌐
  3227.         .dc    key_move_window_down-@b    ü¿
  3228.         .dc    key_grow_window-@b    ü½
  3229.         .dc    key_clear_buffer-@b    CLR
  3230.         .dc    0            HELP
  3231.         .dc    0            HOME
  3232.         .dc    key_suspend_condrv-@b    UNDO
  3233.  
  3234. ISETBL:        .macro    address,char
  3235.         .dc    address-($+4),CTRL+char
  3236.         .endm
  3237.  
  3238. isearch_table:
  3239.         ISETBL    isearch_next_char    ,'I'    * TAB
  3240.         ISETBL    isearch_next_char    ,'M'    * CR
  3241.         ISETBL    isearch_lf        ,'J'    * LF(-> CR)
  3242.  
  3243.         ISETBL    isearch_meta_end    ,'['    * ESC
  3244.         ISETBL    isearch_ctrl_g_end    ,'G'
  3245.         ISETBL    isearch_ctrl_s        ,'S'
  3246.         ISETBL    isearch_ctrl_r        ,'R'
  3247.         ISETBL    isearch_backspace_b    ,'B'
  3248.         ISETBL    isearch_backspace_h    ,'H'
  3249.         ISETBL    isearch_ctrl_f        ,'F'
  3250.         ISETBL    isearch_input_ctrlcode    ,'V'
  3251.         ISETBL    isearch_input_ctrlcode    ,'Q'
  3252.         .dc    0
  3253.  
  3254. isearch_lf:
  3255.         moveq    #CR,d0            ëⁿìsé╞î⌐é╚é╖
  3256.         bra    isearch_next_char
  3257.  
  3258. isearch_ctrl_s:
  3259.         moveq    #0,d0
  3260.         bra    @f
  3261. isearch_ctrl_r:
  3262.         moveq    #-1,d0
  3263. @@:        cmp.b    (isch_direct,sp),d0
  3264.         beq    isearch_search_next    ;ă/æOé╠ò╢ÄÜé⌐éτîƒì⌡
  3265.         move.b    d0,(isch_direct,sp)
  3266.         bra    isearch_search_next0    ;îƒì⌡ò╢ÄÜù±é╠ûûö÷/ɵô¬é╔ê┌ô«
  3267.  
  3268. isearch_input_ctrlcode:
  3269.         st    (isch_inpmod,sp)
  3270.         bra    isearch_loop
  3271.  
  3272. isearch_backspace_h:
  3273.         SFTbtst    SFT_CTRL
  3274.         beq    @f
  3275.         KEYbtst    KEY_H
  3276.         bne    @f
  3277.         KEYbtst    KEY_BS
  3278.         lea    (key_toggle_buffering_mode,pc),a0
  3279.         bne    isearch_fnckey_exit    ;C-bs
  3280. @@:
  3281. isearch_backspace_b:
  3282.         movea.l    (isch_strptr,sp),a0
  3283.         moveq    #0,d0
  3284.         move.b    (a0)+,d0
  3285.         beq    isearch_loop        îƒì⌡ò╢ÄÜù±é═ï≤
  3286.  
  3287.         lea    (ctype_table,pc),a1
  3288. @@:
  3289.         tst.b    (a1,d0.w)        MULTIBYTE
  3290.         smi    d1
  3291.         ext    d1            ö╝èp=$0000,æSèp=$ffff
  3292.         suba    d1,a0            æSèpé╚éτ1byteÉié▀éΘ
  3293.         move.b    (a0)+,d0
  3294.         bne    @b
  3295.  
  3296.         clr.b    (-2,a0,d1.w)        ì┼îπé╠ò╢ÄÜé≡Å┴é╖
  3297.         bsr    clear_message
  3298.         bra    isearch_redraw_loop
  3299.  
  3300. isearch_ctrl_f:
  3301.         movea.l    (isch_strptr,sp),a0
  3302.         tst.b    (a0)            ;îƒì⌡ò╢ÄÜù±é¬é▄é╛ôⁿù═é│éΩé─éóé╚éóé╚éτ
  3303.         beq    pickup_char_cur        ;âJü[â\âïê╩Æué⌐éτÄ√ô╛
  3304.         move.l    (search_char_adr,pc),d0
  3305.         beq    isearch_bell        ;îƒì⌡Ä╕ösÄ₧é═ĵéΦì₧é▀é╚éó
  3306.  
  3307.         move    (search_xbyte,pc),d2    ;îƒì⌡ɼî≈Ä₧é═î⌐é┬é⌐é┴é╜
  3308.         move    (search_x,pc),d3    ;ò╢ÄÜù±é╠ûûö÷é⌐éτĵéΦì₧é▐
  3309.         movea.l    d0,a1
  3310.         suba    d2,a1
  3311.         subq.l    #1,a1
  3312.         TopChk    a1
  3313.         moveq    #0,d1
  3314.         move.b    (a1),d1            ;ìsé╠âoâCâgÉö
  3315.  
  3316.         movea.l    d0,a1
  3317.         lea    (case_table,pc),a2
  3318. pickup_char_loop:
  3319.         bsr    get_char
  3320.         moveq    #0,d4
  3321.         move.b    (a0)+,d4
  3322.         beq    pickup_char_exec
  3323.         tst    d0
  3324.         bmi    pickup_char_cmp_mb
  3325.  
  3326.         move.b    (a2,d4.w),d4        -x âIâvâVâçâôé╔éµé┴é─é═æσò╢ÄÜżò╢ÄÜé≡
  3327.         cmp.b    (a2,d0.w),d4        ô»êΩÄïé╡é─öΣèré╖éΘ
  3328.         bra    @f
  3329. pickup_char_cmp_mb:
  3330.         lsl    #8,d4            2bytesò╢ÄÜ
  3331.         move.b    (a0)+,d4
  3332.         cmp    d0,d4            ;1998/02/28 é▒é╠öΣèré═òsùvé╔é╚é┴é╜é╞
  3333. @@:        bne    isearch_bell        ;Ävéñé¬üAêΩë₧Äcé╡é─é¿é¡
  3334.         cmp    d1,d2
  3335.         bne    pickup_char_loop
  3336.  
  3337.         addq.l    #1,a1
  3338.         EndChk    a1
  3339.         move.b    (a1)+,d1        ;ìsé╠âoâCâgÉö
  3340.         EndChk    a1
  3341.         moveq    #0,d2            ;cursorX
  3342.         moveq    #0,d3            ;cursorXbyte
  3343.         bra    pickup_char_loop
  3344.  
  3345. pickup_char_cur:
  3346.         lea    (line_buf,pc),a1
  3347.         movem    (cursorX,pc),d2/d3/d4
  3348.         lsl    #2,d4            ;cursorY
  3349.         movea.l    (a1,d4.w),a1
  3350.         moveq    #0,d1
  3351.         move.b    (a1)+,d1        ;Æìû┌ìsé╠ò╢ÄÜÉö
  3352.         adda    d3,a1
  3353.         EndChk    a1
  3354.         bsr    get_char
  3355.         tst    d0
  3356.         beq    isearch_bell
  3357. pickup_char_exec:
  3358.         movea.l    (isch_strptr,sp),a0
  3359.         bsr    get_isearch_strlen
  3360.         tst    d0
  3361.         bmi    isearch_mb_2
  3362.         bne    isearch_sb
  3363. *isearch_ctrl_f_end:
  3364.         bra    isearch_loop
  3365.  
  3366. * îƒì⌡ò╢ÄÜù±é╠èeÄφÅεò±é≡ô╛éΘ
  3367. * in    a0.l    ò╢ÄÜù±
  3368. * out    d1.l    ò╢ÄÜÉö
  3369. *    a0.l    ò╢ÄÜù±ûûö÷(NUL)
  3370. *    a1.l    üV(print_message_contùp)
  3371.  
  3372. get_isearch_strlen:
  3373.         move.l    a0,-(sp)
  3374. @@:        tst.b    (a0)+
  3375.         bne    @b
  3376.         subq.l    #1,a0
  3377.         move.l    a0,d1
  3378.         sub.l    (sp)+,d1
  3379.         lea    (a0),a1
  3380.         rts
  3381.  
  3382. isearch_exit:
  3383.         movea.l    (isch_strptr,sp),a1
  3384.         lea    (sizeof_isch,sp),sp
  3385.  
  3386.         lea    (ctrl2scan_table,pc),a0
  3387.         move.b    (a0,d0.w),-(sp)
  3388.         pea    (keyinp_direct,pc)
  3389.         bra    isearch_end
  3390.  
  3391. isearch_ctrl_g_end:
  3392.         movea.l    (isch_save_line,sp),a0
  3393.         bsr    reset_line_address_buf_2
  3394.  
  3395.         lea    (cursorX,pc),a0
  3396.         move.l    (isch_save_cx,sp),(a0)+    ;cusorX/Xbyte
  3397.         move    (isch_save_cy,sp),(a0)    ;cusorY
  3398.         bsr    draw_backscroll
  3399. isearch_meta_end:
  3400.         movea.l    (isch_strptr,sp),a1
  3401.         lea    (sizeof_isch,sp),sp
  3402.         bra    isearch_end
  3403.  
  3404. isearch_end:
  3405.         tst.b    (a1)            îƒì⌡ò╢ÄÜù±é≡ò█æ╢é╖éΘ
  3406.         beq    isearch_skip_save_str
  3407.         lea    (isearch_string_buf,pc),a0
  3408. @@:        move.b    (a1)+,(a0)+
  3409.         bne    @b
  3410. isearch_skip_save_str:
  3411.  
  3412. * ì─ÆΦï`ë┬ö\é╚âLü[é╠ôαùeé≡û▀é╖
  3413.         pea    (fnckey_buf,pc)
  3414.         move    #$01_00,-(sp)        É▌ÆΦ
  3415.         DOS    _FNCKEY
  3416.         addq.l    #6,sp
  3417.  
  3418.         bsr    fep_disable
  3419.         .if    0
  3420.         bsr    gm_active
  3421.         .endif
  3422.         bsr    clear_cursor
  3423.         bra    clear_message
  3424.  
  3425.         .endif
  3426.  
  3427. * îƒì⌡ ---------------------------------------- *
  3428.  
  3429. * C-^
  3430. key_search_forward_current_word:
  3431.         bsr    readline_yank_current_word
  3432.         bra    key_search_forward
  3433. * ü½îƒì⌡ü^ăîƒì⌡
  3434. key_search_forward:
  3435.         lea    (search_forward_mes,pc),a1
  3436.         bsr    input_string
  3437.         beq    search_forward_end
  3438.         bsr    copy_search_str
  3439. key_search_forward_next:
  3440.         bsr    make_search_work
  3441.         beq    search_forward_end
  3442.         lea    (searching_mes,pc),a1
  3443.         bsr    print_message
  3444.         bsr    search_forward_main
  3445. search_found_or_not:
  3446.         lea    (not_found_mes,pc),a1
  3447.         bmi    print_message
  3448.         bra    clear_message
  3449.  
  3450. readline_yank_current_word:
  3451.         bsr    get_cursor_line_buffer
  3452.         bmi    key_kill_condrv
  3453.  
  3454.         moveq    #GETSMAX,d2
  3455.         lea    (RL_PASTBUF,pc),a2
  3456.         bsr    yank_current_word_sub
  3457.         lea    (RL_PASTBUF,pc),a0
  3458.         move.l    a0,(past_pointer-RL_PASTBUF,a0)
  3459. search_forward_end:
  3460.         rts
  3461.  
  3462. * ö─ùpâoâbâtâ@é⌐éτîƒì⌡ò╢ÄÜù±ùpâoâbâtâ@é╔æ╥ö≡é╡é─é¿é¡
  3463. copy_search_str:
  3464.         lea    (search_string_buf,pc),a0
  3465. @@:        move.b    (a1)+,(a0)+
  3466.         bne    @b
  3467.         rts
  3468.  
  3469. * in    a1.l    îƒì⌡ò╢ÄÜù±
  3470. * out    d7.l    ì┼Åëé╠1âoâCâg(2âoâCâgò╢ÄÜé╠ÅΩìçé═Åπê╩âoâCâgé╠é▌)
  3471. *    a0.l    case_table
  3472. *    a3.l    line_buf
  3473. *    a5.l    (a5):        îƒì⌡ò╢ÄÜù±
  3474. *        (GETSMAX+1,a5):    è┐ÄÜîƒì╕âeü[âuâï
  3475. KANJITBL    .equ    ctype_table-search_string
  3476.  
  3477. make_search_work:
  3478.         lea    (search_string_buf,pc),a1
  3479. make_search_work_a1:
  3480.         lea    (case_table,pc),a0
  3481.         lea    (line_buf,pc),a3
  3482.         moveq    #0,d0
  3483.         moveq    #0,d7
  3484.         lea    (search_string,pc),a5
  3485.         lea    (a5),a2
  3486.  
  3487.         move.b    (a1)+,d7        ì┼Åëé╠éPò╢ÄÜ
  3488.         beq    make_search_work_end
  3489.         move.b    (a0,d7.w),d7        éáéτé⌐é╢é▀æσò╢ÄÜë╗é╡é─é¿é¡
  3490.         tst.b    (KANJITBL,a5,d7.w)
  3491.         bmi    make_search_str_mb_low
  3492.  
  3493. @@:        move.b    (a1)+,d0
  3494.         tst.b    (KANJITBL,a5,d0.w)
  3495.         bmi    make_search_str_mb_high
  3496.         move.b    (a0,d0.w),(a2)+
  3497. make_search_str_next:
  3498.         bne    @b
  3499. @@:        moveq    #1,d0
  3500. make_search_work_end:
  3501.         rts
  3502.  
  3503. make_search_str_mb_high:
  3504.         move.b    d0,(a2)+
  3505.         beq    @b
  3506. make_search_str_mb_low:
  3507.         move.b    (a1)+,(a2)+        ë║ê╩âoâCâg(æσò╢ÄÜë╗é╡é╚éó)
  3508.         bra    make_search_str_next
  3509.  
  3510. * ü½îƒì⌡âüâCâôÅêù¥
  3511. * in    d7.l    ì┼Åëé╠1âoâCâg(2âoâCâgò╢ÄÜé╠ÅΩìçé═Åπê╩âoâCâgé╠é▌)
  3512. *    a0.l    case_table
  3513. *    a3.l    line_buf
  3514. *    a5.l    (a5):        îƒì⌡ò╢ÄÜù±
  3515. *        (GETSMAX+1,a5):    è┐ÄÜîƒì╕âeü[âuâï
  3516. * out    d0.l    0:îƒì⌡ɼî≈ -1:Ä╕ös
  3517. * ö⌡ìl:
  3518. *    i_search_forward_mainé┼é═
  3519. *    É¼î≈é╖éΩé╬search_char_adrüAsearch_xüAsearch_xbyteé¬âZâbâgé│éΩéΘ.
  3520. *    Ä╕ösé╖éΩé╬search_char_adré¬âNâèâAé│éΩéΘ.
  3521.  
  3522. i_search_forward_main:
  3523.         not.l    d7            ;Åπê╩âÅü[âhé¬òëé╚éτÉïăîƒì⌡âéü[âh
  3524.         not    d7
  3525.         bsr    get_isearch_start
  3526.         bne    @f
  3527. search_forward_main:
  3528.         bsr    search_sub_getcur
  3529.         bmi    search_not_found
  3530. @@:
  3531.         .ifdef    __EOBCUR
  3532.         tst.b    (a1)
  3533.         beq    search_not_found
  3534.         .endif
  3535.  
  3536.         .ifdef    __EMACS
  3537.         bclr    #ISEARCH_bit,(bitflag-case_table,a0)
  3538.         beq    @f
  3539.  
  3540.         subq.l    #1,a1
  3541.         subq    #1,d2
  3542. @@:
  3543.         .endif
  3544. search_forward_skip_lowbyte:
  3545.         moveq    #0,d3
  3546. search_forward_not_match:
  3547.         addq.l    #1,a1            ;ăé╠ò╢ÄÜé⌐éτÆ▓é╫éΘ
  3548.         EndChk    a1
  3549.         addq    #1,d2
  3550.         cmp    d1,d2            ;îàÉö
  3551.         bne    search_forward_char
  3552.  
  3553.         tst.b    (a1)+
  3554.         beq    search_not_found    ;âoâbâtâ@ûûé▄é┼î⌐é┬é⌐éτé╚é⌐é┴é╜
  3555.         EndChk    a1
  3556.         moveq    #0,d2
  3557.         moveq    #0,d1
  3558.         move.b    (a1)+,d1        ;îàÉö
  3559.         beq    search_not_found
  3560.         EndChk    a1
  3561. search_forward_char:
  3562.         tst.b    (KANJITBL,a5,d3.w)    é│é┴é½öΣèré╡é╜é╠é¬æSèpé╚éτë║ê╩âoâCâgé≡ö≥é╬é╖
  3563.         bmi    search_forward_skip_lowbyte
  3564.  
  3565.         move.b    (a1),d3
  3566.         cmp.b    (a0,d3.w),d7
  3567.         bne    search_forward_not_match
  3568.         bsr    search_sub
  3569.         bne    search_forward_not_match    Æìû┌ê╩Æué⌐éτé═êΩÆvé╡é╚éó
  3570.  
  3571.         bsr    search_zenkaku_check    ;îàê╩Æu(d3)é╠Ä√ô╛é╠é▌
  3572.         lea    (search_char_adr,pc),a2
  3573.         move.l    a1,(a2)+        ;search_char_adr
  3574.         move    d3,(a2)+        ;search_x
  3575.         move    d2,(a2)+        ;search_xbyte
  3576.  
  3577. ;i-searché╚éτâJü[â\âïé═îƒì⌡ò╢ÄÜù±é╠ûûö÷é╔ê┌ô«é╖éΘ
  3578.         tst.l    d7
  3579.         bpl    isearch_move_skip
  3580.  
  3581.         lea    (-1,a1),a2
  3582.         suba    d2,a2
  3583.         TopChk    a2
  3584.         move.b    (a2),d1            ;ìsé╠âoâCâgÉö
  3585. isearch_move_loop:
  3586.         bsr    get_char        ;êΩò╢ÄÜò¬âJü[â\âïé≡Éié▀éΘ
  3587.         cmp    d1,d2
  3588.         bne    @f
  3589.  
  3590.         addq.l    #1,a1
  3591.         EndChk    a1
  3592.         move.b    (a1)+,d1        ;ìsé╠âoâCâgÉö
  3593.         EndChk    a1
  3594.         moveq    #0,d2            ;cursorXbyte
  3595.         moveq    #0,d3            ;cursorX
  3596. @@:
  3597.         tst    d0
  3598.         bpl    @f
  3599.         addq.l    #1,a5            ;2âoâCâgò╢ÄÜ
  3600. @@:        tst.b    (a5)+
  3601.         bne    isearch_move_loop    ;îƒì⌡ò╢ÄÜù±é╠ûûö÷é▄é┼ê┌ô«é╖éΘ
  3602. isearch_move_skip:
  3603.  
  3604. search_found_scroll:
  3605.         subq.l    #1,a1
  3606.         suba    d2,a1
  3607.         TopChk    a1
  3608. jump_scroll:
  3609.         lea    (line_buf,pc),a3
  3610.         movea.l    (a3),a0
  3611.         move    (window_line,pc),d0
  3612. @@:
  3613.         tst.b    (a3)            ;é▒é╠â`âFâbâNé═ redraw-window é┼òKùv
  3614.         bmi    @f            ;é╗éñé┼é╚éóÅΩìçéαöOé╠ê╫
  3615.         cmpa.l    (a3)+,a1
  3616.         dbeq    d0,@b
  3617.         beq    jump_scroll_same_page    î⌐é┬é»é╜ìsé¬î╗ì▌ò\ĪÆåé╚éτâXâNâìü[âïé╡é╚éó
  3618. @@:
  3619.         movea.l    a1,a0            î⌐é┬é»é╜ìsé≡ì┼ÅπÆié╔ò\Ī
  3620.  
  3621.         .if    1
  3622.         move    (window_line,pc),d1    ;âZâôâ^âèâôâO
  3623.         lsr    #1,d1
  3624.         subq    #1,d1            ;ò\ĪìsÉöé╠ö╝ò¬é╛é»ë║é╔é╕éτé╖
  3625.         moveq    #0,d0
  3626. jump_scroll_center_loop:
  3627.         lea    (-1,a0),a3
  3628.         TopChk    a3
  3629.         move.b    (a3),d0
  3630.         beq    jump_scroll_center_loop_end
  3631.         suba    d0,a0            ;æOé╠ìsé╔ê┌ô«
  3632.         subq.l    #1+1,a0
  3633.         TopChk    a0
  3634.         dbra    d1,jump_scroll_center_loop
  3635. jump_scroll_center_loop_end:
  3636.         .endif
  3637.  
  3638.         PUSH    d2/a1
  3639.         bsr    reset_line_address_buf_2
  3640.         tst    d1
  3641.         bmi    @f            ò\Īìsò¬é╛é»âfü[â^é¬éáéΘ(ûûö÷é┼é═é╚éó)
  3642.         bsr    end_of_buffer_sub
  3643. @@:
  3644.         POP    d2/a1
  3645.         moveq    #-1,d1
  3646.         lea    (line_buf,pc),a3
  3647. @@:
  3648.         addq    #1,d1            ;î⌐é┬é»é╜ìsé╠ò\Īé═ë╜ìsû┌é⌐üH
  3649.         cmpa.l    (a3)+,a1        ;(âoâbâtâ@ûûö÷é≡ò\Īé╡é╜Ä₧ê╚èOé═ 0)
  3650.         bne    @b
  3651.  
  3652.         st    d0            ;ì─ò`ëµ òKùv
  3653.         bra    @f
  3654. jump_scroll_same_page:
  3655.         move    (window_line,pc),d1
  3656.         sub    d0,d1
  3657.         sf    d0            ;ì─ò`ëµ òsùv
  3658. @@:        
  3659.         lea    (cursorX,pc),a0
  3660.         move    d3,(a0)+        ;cursorX
  3661.         move    d2,(a0)+        ;cursorXbyte
  3662.         move    d1,(a0)            ;cursorY
  3663.         tst.b    d0
  3664.         beq    @f
  3665.         bsr    draw_backscroll
  3666. @@:        moveq    #0,d0
  3667.         rts
  3668.  
  3669. get_isearch_start:
  3670.         lea    (search_char_adr,pc),a2
  3671.         move.l    (a2),a1            ;search_char_adr
  3672.         clr.l    (a2)+
  3673.         move    (a2)+,d3        ;search_x
  3674.         move    (a2)+,d2        ;search_xbyte
  3675.  
  3676.         moveq    #0,d1
  3677.         lea    (-1,a1),a2
  3678.         suba    d2,a2
  3679.         TopChk    a2
  3680.         move.b    (a2),d1
  3681.  
  3682.         move.l    a1,d0            ;tst.l a1
  3683.         rts
  3684.  
  3685. search_sub_getcur:
  3686.         bsr    get_cursor_line_buffer
  3687.         bmi    search_sub_getcur_end
  3688.  
  3689.         move    (cursorXbyte,pc),d2
  3690.         moveq    #0,d1
  3691.         move.b    (a1)+,d1        ;âoâCâgÉö
  3692.         adda    d2,a1
  3693.         EndChk2    a1
  3694.  
  3695.         tst    d2            ;not minus
  3696. search_sub_getcur_end:
  3697. search_backward_end:
  3698.         rts
  3699.  
  3700. * C-\
  3701. key_search_backward_current_word:
  3702.         bsr    readline_yank_current_word
  3703.         bra    key_search_backward
  3704. * ü¬îƒì⌡ü^ăîƒì⌡
  3705. key_search_backward:
  3706.         lea    (search_backward_mes,pc),a1
  3707.         bsr    input_string
  3708.         beq    search_backward_end
  3709.         bsr    copy_search_str
  3710. key_search_backward_next:
  3711.         bsr    make_search_work
  3712.         beq    search_backward_end
  3713.         lea    (searching_mes,pc),a1
  3714.         bsr    print_message
  3715.         bsr    search_backward_main
  3716.         bra    search_found_or_not
  3717.  
  3718. * ü¬îƒì⌡âüâCâôÅêù¥
  3719. * in    d7.l    ì┼Åëé╠1âoâCâg(2âoâCâgò╢ÄÜé╠ÅΩìçé═Åπê╩âoâCâgé╠é▌)
  3720. *    a0.l    case_table
  3721. *    a3.l    line_buf
  3722. *    a5.l    (a5):        îƒì⌡ò╢ÄÜù±
  3723. *        (GETSMAX+1,a5):    è┐ÄÜîƒì╕âeü[âuâï
  3724. * out    d0.l    0:îƒì⌡ɼî≈ -1:Ä╕ös
  3725. * ö⌡ìl:
  3726. *    i_search_backward_mainé┼é═
  3727. *    É¼î≈é╖éΩé╬search_char_adrüAsearch_xüAsearch_xbyteé¬âZâbâgé│éΩéΘ.
  3728. *    Ä╕ösé╖éΩé╬search_char_adré¬âNâèâAé│éΩéΘ.
  3729.  
  3730. i_search_backward_main:
  3731.         bsr    get_isearch_start
  3732.         bne    @f
  3733. search_backward_main:
  3734.         bsr    search_sub_getcur
  3735.         bmi    search_not_found
  3736. @@:
  3737.         .ifdef    __EMACS
  3738.         bclr    #ISEARCH_bit,(bitflag-case_table,a0)
  3739.         beq    @f
  3740.  
  3741.         addq.l    #1,a1            ;îπé┼1ü`2é≡ê°é¡é╠é┼Åπî└îƒì╕é═òsùv
  3742.         addq    #1,d2
  3743. @@:
  3744.         .endif
  3745.         moveq    #0,d3
  3746. search_backward_not_match:
  3747.         subq.b    #1,d2
  3748.         bpl    search_backward_cmp
  3749.  
  3750.         subq.l    #2,a1            ;ìsé╠ɵô¬é▄é┼æké┴é╜ÅΩìç
  3751.         TopChk    a1
  3752.         move.b    (a1),d1
  3753.         move.b    d1,d2            æOé╠ìsé╠ëEÆ[é⌐éτ
  3754.         bne    search_backward_not_match
  3755. search_not_found:
  3756.         moveq    #-1,d0
  3757.         rts
  3758. search_backward_cmp:
  3759.         subq.l    #1,a1
  3760.         TopChk    a1
  3761.  
  3762.         move.b    (a1),d3
  3763.         cmp.b    (a0,d3.w),d7
  3764.         bne    search_backward_not_match
  3765.         bsr    search_sub
  3766.         bne    search_backward_not_match
  3767.  
  3768.         bsr    search_zenkaku_check    êΩÆvò╢ÄÜù±é¬æSèpé╠ôrÆåé⌐éτé⌐Æ▓é╫éΘ
  3769.         bcs    search_backward_not_match
  3770.  
  3771.         lea    (search_char_adr,pc),a2
  3772.         move.l    a1,(a2)+        ;search_char_adr
  3773.         move    d1,(a2)+        ;search_x
  3774.         move    d2,(a2)+        ;search_xbyte
  3775.         bra    search_found_scroll
  3776.  
  3777. search_zenkaku_check:
  3778. usereg        .reg    d1-d2/a1
  3779.         PUSH    usereg
  3780.         suba    d2,a1
  3781.         TopChk    a1
  3782.         move    d2,d1
  3783.         moveq    #0,d2
  3784.         moveq    #0,d3
  3785.         bra    @f
  3786. zenkaku_check_loop:
  3787.         bsr    get_char
  3788. @@:        cmp    d2,d1
  3789.         bhi    zenkaku_check_loop
  3790.         POP    usereg
  3791.         rts
  3792.  
  3793. * îƒì⌡âTâu(2ò╢ÄÜû┌ê╚ì~é≡öΣèré╖éΘ)
  3794. search_sub:
  3795. usereg        .reg    d1-d4/a1-a2/a5
  3796.         PUSH    usereg
  3797.         lea    (a5),a2
  3798.         moveq    #0,d0
  3799. search_sub_loop:
  3800.         move    d3,d4            æOé╠öΣèrò╢ÄÜ
  3801.         move.b    (a5)+,d3
  3802.         beq    search_sub_found
  3803.         addq.l    #1,a1
  3804.         EndChk    a1
  3805.         addq    #1,d2
  3806.         cmp    d1,d2
  3807.         bne    search_sub_cmpchar
  3808.  
  3809.         tst.b    (a1)+
  3810.         beq    search_sub_not_found
  3811.         EndChk    a1
  3812.         moveq    #0,d2
  3813.         moveq    #0,d1
  3814.         move.b    (a1)+,d1
  3815.         beq    search_sub_not_found
  3816.         EndChk    a1
  3817. search_sub_cmpchar:
  3818.         move.b    (a1),d0
  3819.         tst.b    (KANJITBL,a2,d4.w)
  3820.         bmi    @f
  3821.         move.b    (a0,d0.w),d0
  3822. @@:        cmp.b    d0,d3
  3823.         beq    search_sub_loop
  3824. search_sub_not_found:
  3825.         moveq    #-1,d0
  3826. search_sub_found:
  3827.         POP    usereg
  3828.         rts
  3829.  
  3830. * ÅIù╣ ---------------------------------------- *
  3831.  
  3832. * OPT.1 + UNDO : ëµû╩é≡Äcé╡é╜é▄é▄ÅIù╣
  3833. key_suspend_condrv:
  3834.         lea    (bitflag,pc),a0
  3835.         tst.b    (a0)            HELPMODE_bit
  3836.         bmi    key_kill_condrv        âwâïâvâéü[âhé╚éτö▓é»éΘé╛é»
  3837.         bset    #SUSPEND_bit,(a0)
  3838. key_kill_condrv:
  3839.         addq.l    #4,sp
  3840.         rts
  3841.  
  3842. * âJü[â\âïìsé╠âoâbâtâ@âAâhâîâXé≡ïüé▀éΘ -------- *
  3843. * out    a1.l    âAâhâîâX
  3844. *    a3.l    line_buf
  3845. *    ccr N    0:OK 1:error
  3846.  
  3847. get_cursor_line_buffer:
  3848.         movea.l    d0,a1
  3849.         lea    (line_buf,pc),a3
  3850.         move    (cursorY,pc),d0
  3851.         lsl    #2,d0
  3852.         move.l    (a3,d0.w),d0
  3853.         exg    d0,a1
  3854.         rts
  3855.  
  3856. * âJâbâgüòâyü[âXâg ---------------------------- *
  3857.  
  3858.         .ifdef    __EMACS            ;+07b
  3859. key_yank_region:
  3860.         move.l    (mark_char_adr,pc),d0
  3861.         bne    @f
  3862. no_mark_error:
  3863.         bsr    visual_bell        ;â}ü[âNé¬é╚éóé╚éτâGâëü[
  3864.         lea    (no_mark_err_mes,pc),a1
  3865.         bra    print_message
  3866. @@:
  3867.         .else
  3868. key_yank:
  3869.         move.l    (mark_char_adr,pc),d0    ;â}ü[âNé│éΩé─éóé╚é»éΩé╬
  3870.         beq    key_yank_current_word    ;âJü[â\âïê╩Æué╠ÆPîΩé≡âyü[âXâg
  3871.         .endif
  3872.  
  3873.         bsr    get_mark_area
  3874.         beq    key_kill_condrv
  3875.  
  3876.         bsr    kill_region_start
  3877. yank_and_kill_condrv:
  3878.         addq.l    #4,sp
  3879. yank_sub:
  3880.         lea    (bitflag,pc),a0
  3881.         bset    #AFTERCR_bit,(a0)    ëⁿìsÆ╝îπâtâëâOé≡ùºé─é─âyü[âXâgê╩Æué≡ɵô¬é╔é╖éΘ
  3882.         move.l    (pastbuf_adr,pc),(past_pointer-bitflag,a0)
  3883.         rts
  3884.  
  3885. key_yank_current_word:
  3886.         bsr    get_cursor_line_buffer
  3887.         bmi    key_kill_condrv
  3888.  
  3889.         movem.l    (pastbuf_size,pc),d2/a2
  3890. *        movea.l    (pastbuf_adr,pc),a2
  3891.         bsr    yank_current_word_sub
  3892.         bra    yank_and_kill_condrv
  3893.  
  3894. yank_current_word_sub:
  3895.         moveq    #0,d3
  3896.         move.b    (a1)+,d3
  3897.         move    (cursorXbyte,pc),d1
  3898.         adda    d1,a1
  3899.         EndChk2    a1
  3900.         bra    @f
  3901. yank_current_word_loop:
  3902.         cmp    d1,d3
  3903.         beq    yank_current_word_endofline
  3904. yank_current_word_nextline:
  3905.         move.b    (a1)+,d0
  3906.         cmpi.b    #$20,d0
  3907.         bls    yank_current_word_end
  3908.         EndChk    a1
  3909.         move.b    d0,(a2)+
  3910.         addq    #1,d1
  3911. @@:
  3912.         subq.l    #1,d2
  3913.         bne    yank_current_word_loop
  3914. yank_current_word_end:
  3915.         bra    set_nulstr_yankptr
  3916.  
  3917. yank_current_word_endofline:
  3918.         tst.b    (a1)+
  3919.         beq    yank_current_word_end
  3920.         EndChk    a1
  3921.         move.b    (a1)+,d3
  3922.         beq    yank_current_word_end
  3923.         EndChk    a1
  3924.         moveq    #0,d1
  3925.         bra    yank_current_word_nextline
  3926.  
  3927. * âèü[âWâçâôé╠âAâhâîâXé≡ô╛éΘ ------------------ *
  3928. * out    d0.w/d1.w    æOÆ[üEîπÆ[é╠îàê╩Æu(âoâCâgÆPê╩)
  3929. *    d2.w/d3.w    üV        ìsâoâCâgÉö
  3930. *    a0.l/a1.l    üV        ò╢ÄÜâAâhâîâX
  3931. * ccrZ    0:OK 1:ö═ê═é¬û│î°
  3932.  
  3933. get_mark_area:
  3934.         move.l    (mark_char_adr,pc),d1
  3935.         beq    get_mark_area_end
  3936.  
  3937.         movea.l    (mark_line_adr,pc),a0
  3938.         moveq    #0,d0
  3939.         moveq    #0,d2
  3940.         move.b    (a0)+,d2        d2.w=â}ü[âNìsé╠îàÉö
  3941.         bra    @f
  3942. 1:
  3943.         addq    #1,d0            d0.w=markXbyte
  3944.         addq.l    #1,a0            a0.l=â}ü[âNê╩Æu
  3945. @@:
  3946.         EndChk    a0
  3947.         cmpa.l    d1,a0
  3948.         bne    1b
  3949.  
  3950.         bsr    get_cursor_line_buffer
  3951.         bpl    @f
  3952.  
  3953.         moveq    #0,d0
  3954.         bra    get_mark_area_end
  3955. @@:
  3956.         moveq    #0,d3
  3957.         move.b    (a1)+,d3        d3.w=âJü[â\âïê╩Æué╠îà
  3958.  
  3959.         move    (cursorXbyte,pc),d1
  3960.         adda    d1,a1            a1.l=âJü[â\âïê╩Æu
  3961.         EndChk2    a1
  3962.         cmpa.l    a0,a1
  3963.         bcc    @f
  3964.         exg    d0,d1            a0.l:èJÄn<a1.l:ÅIù╣é╔é╖éΘ
  3965.         exg    d2,d3
  3966.         exg    a0,a1
  3967. @@:
  3968.         cmpa.l    (buffer_old,a6),a0
  3969.         bcc    @f
  3970.         cmpa.l    (buffer_old,a6),a1
  3971.         bcs    @f
  3972.         exg    d0,d1            a1.l<=old<a0.lé╚éτî≡è╖
  3973.         exg    d2,d3
  3974.         exg    a0,a1
  3975. @@:
  3976.         cmpa.l    a0,a1            ;equalé╚éτcursor==mark
  3977. get_mark_area_end:
  3978. kill_region_end:
  3979.         rts
  3980.  
  3981.         .ifdef    __EMACS
  3982. key_kill_region:
  3983.         bsr    get_mark_area
  3984.         beq    no_mark_error
  3985.         addq.l    #4,sp            ;âJâbâgâoâbâtâ@é╔ô]æùé╡é─ÅIù╣
  3986.         bra    kill_region_start
  3987. key_copy_region:
  3988.         bsr    get_mark_area
  3989.         beq    no_mark_error
  3990.         bra    kill_region_start
  3991.  
  3992.         .else
  3993. key_kill_region:
  3994.         addq.l    #4,sp
  3995. key_copy_region:
  3996.         bsr    get_mark_area
  3997.         beq    kill_region_end        ;â}ü[âNö═ê═é═û│î°
  3998.         bra    kill_region_start
  3999.         .endif
  4000.  
  4001. kill_region_start:
  4002.         movem.l    (pastbuf_size,pc),d1/a2
  4003. *        movea.l    (pastbuf_adr,pc),a2
  4004.         subq.l    #1,d1
  4005. kill_region_loop:
  4006.         cmp    d0,d2
  4007.         bne    @f
  4008.         moveq    #0,d0            Äƒé╠ìs
  4009.         addq.l    #1,a0
  4010.         EndChk    a0
  4011.         move.b    (a0)+,d2
  4012.         EndChk    a0
  4013. @@:
  4014.         cmpa.l    a0,a1
  4015.         beq    @f
  4016.         move.b    (a0)+,(a2)+
  4017.         EndChk    a0
  4018.         addq    #1,d0
  4019.         subq.l    #1,d1
  4020.         bne    kill_region_loop
  4021. @@:
  4022.         bra    set_nulstr_yankptr
  4023.  
  4024. *  U : âJü[â\âïü`ò╢ô¬âyü[âXâg
  4025. key_yank_from_beginning_of_line:
  4026.         pea    (yank_and_kill_condrv,pc)
  4027.         bra    kill_from_beginning_of_line_sub
  4028.  
  4029. * ^U : âJü[â\âïü`ò╢ô¬âJâbâg
  4030. key_kill_from_beginning_of_line:
  4031.         pea    (key_kill_condrv,pc)
  4032.         bra    kill_from_beginning_of_line_sub
  4033.  
  4034. kill_from_beginning_of_line_sub:
  4035.         bsr    get_cursor_line_buffer
  4036.         bmi    kill_cansel
  4037.  
  4038.         movea.l    a1,a0            ;ìsô¬
  4039.         adda    (cursorXbyte,pc),a1
  4040.         addq.l    #1,a1            ;â|âCâôâ^
  4041.         EndChk2    a1
  4042.         moveq    #0,d2
  4043.         bra    1f
  4044. @@:
  4045.         suba    d2,a0
  4046. 1:
  4047.         subq.l    #1,a0
  4048.         TopChk    a0
  4049.         move.b    (a0),d2            æOé╠ìsé╠âoâCâgÉö
  4050.         subq.l    #1,a0
  4051.         beq    @f
  4052.         TopChk    a0
  4053.         cmpi.b    #CR,(a0)
  4054.         bne    @b            æOé╠ìsé¬ëⁿìsé┼ÅIéφéΘé▄é┼îJéΦò╘é╖
  4055. @@:
  4056.         addq.l    #2,a0
  4057.         EndChk2    a0
  4058.         move.b    (a0)+,d2
  4059.         EndChk    a0
  4060.         moveq    #0,d0
  4061.         bra    kill_region_start
  4062. kill_cansel:
  4063.         addq.l    #8,sp
  4064.         rts
  4065.  
  4066. *  K : âJü[â\âïü`ò╢ûûâyü[âXâg
  4067. key_yank_to_end_of_line:
  4068.         pea    (yank_and_kill_condrv,pc)
  4069.         bra    kill_to_end_of_line_sub
  4070.  
  4071. * ^K : âJü[â\âïü`ò╢ûûâJâbâg
  4072. key_kill_to_end_of_line:
  4073.         pea    (key_kill_condrv,pc)
  4074.         bra    kill_to_end_of_line_sub
  4075.  
  4076. kill_to_end_of_line_sub:
  4077.         bsr    get_cursor_line_buffer
  4078.         bmi    kill_cansel
  4079.  
  4080.         moveq    #0,d3
  4081.         move.b    (a1)+,d3
  4082.         move    (cursorXbyte,pc),d1
  4083.         adda    d1,a1
  4084.         EndChk2    a1
  4085.         movem.l    (pastbuf_size,pc),d2/a2
  4086. *        movea.l    (pastbuf_adr,pc),a2
  4087.         subq.l    #1,d2
  4088. kill_to_end_of_line_loop:
  4089.         cmp    d1,d3
  4090.         bne    @f
  4091.  
  4092.         tst.b    (a1)+            âJü[â\âïé¬ëEÆ[é╔éáé┴é╜ÅΩìç
  4093.         beq    set_nulstr_yankptr
  4094.         EndChk    a1
  4095.         move.b    (a1)+,d3
  4096.         beq    set_nulstr_yankptr
  4097.         EndChk    a1
  4098.         moveq    #0,d1
  4099. @@:
  4100.         move.b    (a1)+,d0
  4101.         cmpi.b    #CR,d0
  4102.         beq    set_nulstr_yankptr
  4103.         EndChk    a1
  4104.         move.b    d0,(a2)+
  4105.         addq    #1,d1
  4106.         subq.l    #1,d2
  4107.         bne    kill_to_end_of_line_loop
  4108. set_nulstr_yankptr:
  4109.         movea.l    (pastbuf_adr,pc),a1
  4110.         bsr    cut_tail_mb_high
  4111.         clr.b    (a2)
  4112.         lea    (past_pointer,pc),a1
  4113.         move.l    a2,(a1)
  4114.         rts
  4115.  
  4116. * a1.l é⌐éτé╠ò╢ÄÜù±é╠ûûö÷é╠ö╝Æ[é╚âRü[âhé≡ìφéΘ.
  4117. * (-1,a2) é¬â}âïâ`âoâCâgò╢ÄÜé╠ 1 âoâCâgû┌é╚éτ a2.l -= 1.
  4118. * in    a1.l    ò╢ÄÜù±é╠ɵô¬âAâhâîâX
  4119. *    a2.l    ò╢ÄÜù±é╠ûûö÷âAâhâîâX
  4120. * out    a2.l    üV
  4121. * break    d0/a0
  4122.  
  4123. cut_tail_mb_high:
  4124.         cmpa.l    a1,a2
  4125.         beq    cut_tail_mb_high_skip
  4126.         lea    (a2),a0
  4127. cut_tail_mb_high_loop:
  4128.         move.b    -(a0),d0
  4129.         bpl    cut_tail_mb_high_end    ;ASCII
  4130.         cmpi.b    #$a0,d0
  4131.         bcs    @f            ;multi-byte
  4132.         cmpi.b    #$e0,d0
  4133.         bcs    cut_tail_mb_high_end    ;kana
  4134. @@:
  4135.         cmpa.l    a1,a2
  4136.         bne    cut_tail_mb_high_loop
  4137.         addq.l    #1,a0
  4138. cut_tail_mb_high_end:
  4139.         suba.l    a2,a0
  4140.         move    a0,-(sp)
  4141.         lsr    (sp)+
  4142.         bcs    cut_tail_mb_high_skip
  4143.         subq.l    #1,a2
  4144. cut_tail_mb_high_skip:
  4145.         rts
  4146.  
  4147.  
  4148. * ü¬âJâbâgüòâyü[âXâg / ü½âJü[â\âïê┌ô« --------- *
  4149.  
  4150. * A : êΩîΩì╢é╔ê┌ô«
  4151. backward_word_loop:
  4152.         move    (cursorY,pc),d0
  4153.         lsl    #2,d0
  4154.         movea.l    (a3,d0.w),a1
  4155.         subq.l    #2,a1
  4156.         TopChk    a1
  4157.         cmpi.b    #CR,(a1)
  4158.         beq    backward_word_end
  4159. key_backward_word:
  4160.         bsr    key_backward_char
  4161.         tst.l    d0
  4162.         ble    backward_word_end
  4163.         cmpi    #CR,d0
  4164.         beq    backward_word_end
  4165.  
  4166.         move    (cursorXbyte,pc),d1
  4167.         beq    backward_word_loop    ;ì╢Æ[é▄é┼Éié±é╛
  4168.         cmpi    #$20,d0
  4169.         bls    key_backward_word
  4170.         move    (cursorY,pc),d0
  4171.         lsl    #2,d0
  4172.         movea.l    (a3,d0.w),a1
  4173.         adda    d1,a1
  4174.         EndChk2    a1
  4175.         cmpi.b    #$20,(a1)
  4176.         bhi    key_backward_word
  4177. backward_word_end:
  4178. forward_word_end:
  4179.         rts
  4180.  
  4181. * F : êΩîΩëEé╔ê┌ô«
  4182. key_forward_word:
  4183.         bsr    get_cursor_line_buffer
  4184.         bmi    forward_word_end
  4185.  
  4186.         move    (cursorXbyte,pc),d1
  4187.         adda    d1,a1
  4188.         addq.l    #1,a1
  4189.         EndChk2    a1
  4190.         cmpi.b    #CR,(a1)
  4191.         beq    key_forward_char
  4192. forward_word_loop:
  4193.         .ifdef    __EOBCUR
  4194.         tst.b    (a1)
  4195.         beq    forward_word_end
  4196.         .endif
  4197.         cmpi.b    #SPACE,(a1)
  4198.         sls    d4
  4199.         bsr    key_forward_char
  4200.  
  4201.         move    (cursorY,pc),d0
  4202.         lsl    #2,d0
  4203.         movea.l    (a3,d0.w),a1
  4204.         moveq    #0,d2
  4205.         move.b    (a1)+,d2        ;âJü[â\âïìsé╠âoâCâgÉö
  4206.  
  4207.         move    (cursorXbyte,pc),d1
  4208.         adda    d1,a1
  4209.         EndChk2    a1
  4210.         cmpi.b    #CR,(a1)
  4211.         beq    forward_word_end
  4212.         tst.b    d4
  4213.         beq    @f
  4214.         cmpi.b    #SPACE,(a1)        ÉºîΣïLìå(orï≤öÆ)é¬æ▒é¡è╘é═
  4215.         bhi    forward_word_end    êΩÆPîΩé╞î⌐é╚é╖
  4216. @@:
  4217.         tst.b    (a1)
  4218.         bpl    @f
  4219.         cmpi.b    #$a0,(a1)
  4220.         bcs    forward_word_mb        $80-$9f
  4221.         cmpi.b    #$e0,(a1)
  4222.         bcs    @f            $e0-$ff
  4223. forward_word_mb:
  4224.         addq    #1,d1
  4225. @@:
  4226.         addq    #1,d1
  4227.         cmp    d1,d2
  4228.         bne    forward_word_loop
  4229.         movea.l    (a3,d0.w),a1        âJü[â\âïé¬ëEÆ[é╔éáé┴é╜ÅΩìç
  4230.         addq.l    #1,a1
  4231.         adda    d1,a1
  4232.         EndChk2    a1
  4233.         tst.b    (a1)+
  4234.         .ifdef    __EOBCUR
  4235.             beq    key_forward_char
  4236.         .else
  4237.             beq    forward_char_end
  4238.         .endif
  4239.         EndChk    a1
  4240.         tst.b    (a1)+
  4241.         bne    key_forward_word
  4242. forward_char_end:
  4243.         rts
  4244.  
  4245. * ü¿ , é╗é╠æ╝ : âJü[â\âïé≡êΩîàëEé╔ê┌ô«é╖éΘ
  4246. key_forward_char:
  4247.         lea    (cursorX,pc),a0
  4248.         .ifndef    __EMACS
  4249.             move.l    (a0),d6        ;cursorX/Xbyte
  4250.         .endif
  4251.         move    (a0)+,d3        ;cursorX
  4252.         move    (a0)+,d2        ;cursorXbyte
  4253.         move    (a0),d7            ;cursorY
  4254.  
  4255.         bsr    get_cursor_line_buffer
  4256.         bmi    forward_char_end
  4257.         moveq    #0,d1
  4258.         move.b    (a1)+,d1
  4259.         beq    forward_char_end
  4260.  
  4261.         adda    d2,a1
  4262.         EndChk2    a1
  4263.         bsr    get_char
  4264.         cmp    d1,d2
  4265.         beq    cursor_to_right_tip
  4266.         .ifdef    __EOBCUR
  4267. cursor_to_right_move:
  4268.         .endif
  4269.         subq.l    #cursorY-cursorX,a0
  4270.         move    d3,(a0)+
  4271.         move    d2,(a0)
  4272.         .ifndef    __EMACS
  4273. * âJü[â\âïê┌ô«é╔ö║éñâ}ü[âNö╜ô]ù╠êµé╠ò╧ìXé≡Æ╟Å]é│é╣éΘ
  4274. redraw_cursor_char:
  4275.         bsr    draw_char_c
  4276.         move.l    (cursorX,pc),d6        cursorX/Xbyte
  4277.         move    (cursorY,pc),d7
  4278.         bra    draw_char_c
  4279.         .endif
  4280. cursor_to_right_endofbuf:
  4281.         rts
  4282.  
  4283. cursor_to_right_tip:
  4284.         tst.b    (a1)+
  4285.         .ifdef    __EOBCUR
  4286.             beq    cursor_to_right_move
  4287.         .else
  4288.             beq    cursor_to_right_endofbuf
  4289.         .endif
  4290.         EndChk    a1
  4291.         .ifndef    __EOBCUR
  4292.         tst.b    (a1)
  4293.         beq    cursor_to_right_endofbuf
  4294.         .endif
  4295.  
  4296.         subq.l    #cursorY-cursorX,a0
  4297.         clr.l    (a0)+
  4298.  
  4299.         move    (window_line,pc),d0
  4300.         cmp    (a0),d0            ;cursorY
  4301.         bne    @f
  4302.  
  4303.         .ifdef    __EMACS
  4304.             bra    centering_a1
  4305. centering_a1_prev:
  4306.             subq.l    #1,a1
  4307.             suba    d0,a1
  4308.             TopChk    a1
  4309. centering_a1:
  4310.             moveq    #0,d3        ;a1 = ÉVé╡éóâJü[â\âïìs
  4311.             moveq    #0,d2
  4312.             st    (line_buf)    ;âJü[â\âïìsé≡Æåë¢é╔ò\Īé╖éΘ
  4313.             bra    jump_scroll
  4314.                         ;X=0,Xbyte=0 é╠é▄é▄é┼éµéó
  4315.         .else
  4316.             bsr    scroll_up_sub
  4317.             subq    #1,d7
  4318.             move    (window_line,pc),d0
  4319.             .ifdef    __EMACS        ;É╠é╠û╝ÄcéΦ:-)
  4320.                 bra    draw_line_d0
  4321.             .else
  4322.                 bsr    draw_line_d0
  4323.                 bra    redraw_cursor_char
  4324.             .endif
  4325.         .endif
  4326. @@:
  4327.         addq    #1,(a0)            cursorY
  4328.         .ifdef    __EMACS
  4329.             rts
  4330.         .else
  4331.             bra    redraw_cursor_char
  4332.         .endif
  4333.  
  4334. * Z , ^Z , ~ü¿ : êΩìsâXâNâìü[âïâAâbâv
  4335. key_move_window_down:
  4336.         lea    (line_buf,pc),a3
  4337.         tst.l    (a3)
  4338.         bmi    move_window_down_end
  4339.  
  4340.         move    (window_line,pc),d0
  4341.         lsl    #2,d0
  4342.         movea.l    (a3,d0.w),a1
  4343.         moveq    #0,d1
  4344.         move.b    (a1)+,d1
  4345.         adda    d1,a1
  4346.         EndChk2    a1
  4347.         tst.b    (a1)+
  4348.         beq    move_window_down_end
  4349.         EndChk    a1
  4350.         .ifndef    __EOBCUR
  4351.         tst.b    (a1)
  4352.         beq    move_window_down_end
  4353.         .endif
  4354.  
  4355.         bsr    scroll_up_sub
  4356.         lea    (cursorY,pc),a4
  4357.         tst    (a4)
  4358.         beq    @f
  4359.  
  4360.         subq    #1,(a4)            cursorY
  4361.         bra    move_window_down_cursor_fixed
  4362. @@:
  4363.         bsr    check_column_pop_curx
  4364.         .ifndef    __EMACS
  4365.             moveq    #0,d0
  4366.             bsr    draw_line_d0
  4367.         .endif
  4368. move_window_down_cursor_fixed:
  4369.         move    (window_line,pc),d0
  4370.         bra    draw_line_d0
  4371. move_window_down_end:
  4372.         rts
  4373.  
  4374. * X , ^X , ü½ : âJü[â\âïë║ê┌ô«
  4375. key_next_line:
  4376.         lea    (line_buf,pc),a3
  4377.         lea    (cursorY,pc),a2
  4378.         move    (a2),d0
  4379.         cmp    (window_line,pc),d0
  4380.         beq    next_line_scroll
  4381.  
  4382.         addq    #1,d0
  4383.         lsl    #2,d0
  4384.         tst    (a3,d0.w)
  4385.         bmi    next_line_end
  4386.         addq    #1,(a2)            ;cursorY
  4387.         .ifdef    __EMACS
  4388.             bra    check_column_pop_curx
  4389.         .else
  4390.             bsr    check_column_pop_curx
  4391.             move    (a2),d0        ;cursorY
  4392.             bra    next_line_no_scroll
  4393.         .endif
  4394. next_line_scroll:
  4395.         lsl    #2,d0
  4396.         movea.l    (a3,d0.w),a1
  4397.         moveq    #0,d1
  4398.         move.b    (a1)+,d1
  4399.         adda    d1,a1
  4400.         EndChk2    a1
  4401.         tst.b    (a1)+
  4402.         beq    next_line_end
  4403.         EndChk    a1
  4404.         .ifndef    __EOBCUR
  4405.             tst.b    (a1)
  4406.             beq    next_line_end
  4407.         .endif
  4408.         .ifdef    __EMACS
  4409.             bsr    centering_a1
  4410.             bra    check_column_pop_curx
  4411.         .else
  4412.             bsr    scroll_up_sub
  4413.             bsr    check_column_pop_curx
  4414.             move    (window_line,pc),d0
  4415.             .ifndef    __EMACS        ;É╠é╠û╝ÄcéΦ:-)
  4416. next_line_no_scroll:
  4417.                 bsr    draw_line_d0
  4418.                 subq    #1,d0
  4419.             .endif
  4420.             bra    draw_line_d0
  4421.         .endif
  4422. next_line_end:
  4423. move_window_up_end:
  4424.         rts
  4425.  
  4426. * W , ^W , ~ü⌐ : êΩìsâXâNâìü[âïâ_âEâô
  4427. key_move_window_up:
  4428.         lea    (line_buf,pc),a3
  4429.         movea.l    (a3),a1
  4430.         move.l    a1,d0
  4431.         bmi    move_window_up_end    ;âoâbâtâ@é¬ï≤
  4432.  
  4433.         subq.l    #1,a1
  4434.         TopChk    a1
  4435.         moveq    #0,d0
  4436.         move.b    (a1),d0
  4437.         beq    move_window_up_end
  4438.         bsr    scroll_down_sub
  4439.         move    (window_line,pc),d0
  4440.         lea    (cursorY,pc),a4
  4441.         cmp    (a4),d0
  4442.         beq    @f
  4443.  
  4444.         addq    #1,(a4)
  4445.         bra    move_window_up_cursor_fixed
  4446. @@:
  4447.         bsr    check_column_pop_curx
  4448.         .ifndef    __EMACS
  4449.             move    (a4),d0        cursorY
  4450.             bsr    draw_line_d0
  4451.         .endif
  4452. move_window_up_cursor_fixed:
  4453.         moveq    #0,d0
  4454.         bra    draw_line_d0
  4455.  
  4456. * E , ^E , ü¬ : âJü[â\âïÅπê┌ô«
  4457. key_previous_line:
  4458.         lea    (line_buf,pc),a3
  4459.         lea    (cursorY,pc),a0
  4460.         subq    #1,(a0)
  4461.         .ifdef    __EMACS
  4462.             bpl    check_column_pop_curx
  4463.         .else
  4464.             bpl    previous_line_no_scroll
  4465.         .endif
  4466.         clr    (a0)
  4467.         movea.l    (a3),a1
  4468.         move.l    a1,d0
  4469.         bmi    previous_line_end    ;âoâbâtâ@é═ï≤
  4470.  
  4471.         subq.l    #1,a1
  4472.         TopChk    a1
  4473.         moveq    #0,d0
  4474.         move.b    (a1),d0
  4475.         beq    previous_line_end
  4476.  
  4477.         .ifdef    __EMACS
  4478.             bsr    centering_a1_prev
  4479.             bra    check_column_pop_curx
  4480.         .else
  4481.             bsr    scroll_down_sub
  4482.             bsr    check_column_pop_curx
  4483.             moveq    #0,d0
  4484.             .ifndef    __EMACS        ;É╠é╠û╝ÄcéΦ:-)
  4485.                 bra    @f
  4486. previous_line_no_scroll:
  4487.                 bsr    check_column_pop_curx
  4488.                 move    (a0),d0
  4489. @@:
  4490.                 bsr    draw_line_d0
  4491.                 addq    #1,d0
  4492.             .endif
  4493.                 bra    draw_line_d0
  4494.         .endif
  4495. previous_line_end:
  4496.         rts
  4497.  
  4498. * ò\Īëµû╩é╠ì╢Åπé╔éóé╜ÅΩìçé═âXâNâìü[âïé╡é─é⌐éτÅæé½æ½é╖
  4499. backward_char_prev_line:
  4500.         addq    #1,(a4)            ;cursorY
  4501.  
  4502.         subq.l    #1,a1
  4503.         TopChk    a1
  4504.         moveq    #0,d0
  4505.         move.b    (a1),d0
  4506.         beq    backward_char_end
  4507.  
  4508.         .ifdef    __EMACS
  4509.             bsr    centering_a1_prev
  4510.             bra    check_column_max
  4511.         .else
  4512.             bsr    scroll_down_sub
  4513.             addq    #1,(a4)        ;cursorY
  4514.             moveq    #0,d0
  4515.             bsr    draw_line_d0
  4516.         .endif
  4517.  
  4518. * S , ^S , ü⌐ : âJü[â\âïì╢ê┌ô«
  4519. key_backward_char:
  4520.         .ifdef    __EMACS
  4521.             lea    (cursorY,pc),a4
  4522.         .else
  4523.             lea    (cursorX,pc),a4
  4524.             move.l    (a4)+,d6    ;cursorX/Xbyte
  4525.             move    (a4),d7        ;cursorY
  4526.         .endif
  4527.         moveq    #0,d2
  4528.         moveq    #0,d3
  4529.         bsr    get_cursor_line_buffer
  4530.         bmi    backward_char_end
  4531.  
  4532.         move    (cursorXbyte,pc),d1
  4533.         bne    @f
  4534.  
  4535.         subq    #1,(a4)            ;cursorY
  4536.         bmi    backward_char_prev_line
  4537.  
  4538.         bsr    get_cursor_line_buffer
  4539.         moveq    #0,d1
  4540.         move.b    (a1),d1
  4541. @@:
  4542.         addq.l    #1,a1
  4543.         EndChk    a1
  4544. @@:
  4545.         move    d3,d4
  4546.         swap    d4
  4547.         move    d2,d4
  4548.         bsr    get_char
  4549.         cmp    d2,d1
  4550.         bne    @b
  4551.         move.l    d4,-(a4)        ;cursorX/Xbyte
  4552.         .ifdef    __EMACS
  4553.             rts
  4554.         .else
  4555.             bra    redraw_cursor_char
  4556.         .endif
  4557. backward_char_end:
  4558.         moveq    #-1,d0
  4559.         rts
  4560.  
  4561.  
  4562. * ^A : ìsé╠ì╢Æ[é╔ê┌ô«
  4563. key_beginning_of_line:
  4564.             lea    (cursorX,pc),a0
  4565.             clr.l    (a0)+        ;cursorX/Xbyte
  4566.         .ifdef    __EMACS
  4567.             rts
  4568.         .else
  4569.             lea    (line_buf,pc),a3
  4570.             move    (a0),d0        ;cursorY
  4571.             bra    draw_line_d0
  4572.         .endif
  4573.  
  4574. * ROLL_DOWN , ^R : âXâNâìü[âïâ_âEâô
  4575. key_scroll_down:
  4576.         lea    (line_buf,pc),a3
  4577.         movea.l    (a3),a0
  4578.         move    (window_line,pc),d1
  4579.         move    d1,d0
  4580.         addq    #1,d0
  4581.         lsl    #2,d0
  4582.         adda    d0,a3            ;a3=&line_buf[ì┼îπ+1]
  4583.  
  4584.         moveq    #-1,d2
  4585.         bsr    scroll_down_p_sub
  4586.         addq    #1,d2
  4587.         beq    key_beginning_of_page    ;î│é⌐éτɵô¬ìsé╔éóé╜ÅΩìçé═ì╢Åπé╔ê┌ô«é╖éΘ
  4588.         bsr    check_column_pop_curx
  4589.         bra    draw_backscroll
  4590.  
  4591. * ROLL_UP , ^C : âXâNâìü[âïâAâbâv
  4592. key_scroll_up:
  4593.         lea    (line_buf,pc),a3
  4594.         move    (window_line,pc),d1
  4595.         move    d1,d0
  4596.         lsl    #2,d0
  4597.         move.l    (a3,d0.w),d0
  4598.         bmi    key_end_of_buffer    ;1ò┼ò¬ë║é╔ìsé»é╚éó
  4599.  
  4600.         movea.l    d0,a0            ;a0=ì┼ÅIìsé╠âAâhâîâX
  4601.         move    d1,d2
  4602. scroll_up_loop:
  4603.         moveq    #0,d0
  4604.         move.b    (a0)+,d0
  4605.         adda    d0,a0
  4606.         EndChk2    a0
  4607.  
  4608.         tst.b    (a0)+
  4609.         beq    @f            ;ìíé╠ìsé¬âoâbâtâ@ì┼ÅIìs
  4610.         EndChk    a0
  4611.  
  4612.         tst.b    (a0)
  4613. @@:        beq    key_end_of_buffer    ;ëⁿìsÆ╝îπé╚éτì┼îπé╠ìsé═ôⁿéΩé╚éó
  4614.  
  4615.         move    d1,d0
  4616.         movea.l    a3,a1
  4617.         lea    (4,a1),a2
  4618.         subq    #1,d0
  4619. @@:
  4620.         move.l    (a2)+,(a1)+
  4621.         dbra    d0,@b
  4622.         move.l    a0,(a1)
  4623.         dbra    d2,scroll_up_loop
  4624.         bsr    check_column_pop_curx
  4625.         bra    draw_backscroll
  4626.  
  4627. * M-< , C-rolldown : set-mark + beginning-of-buffer
  4628.         .ifdef    __EMACS
  4629. key_beginning_of_buffer_mark:
  4630.             bsr    key_set_mark_quiet
  4631.         .endif
  4632. * T , F0 : âoâbâtâ@é╠ɵô¬ìsé╔ê┌ô«
  4633. key_beginning_of_buffer:
  4634.         bsr    beginning_of_buffer_sub
  4635. * ^T : âJü[â\âïé≡î╗ì▌ò\ĪÆåé╠ëµû╩é╠ì╢Åπé╔ê┌ô«
  4636. key_beginning_of_page:
  4637.         lea    (cursorX,pc),a0
  4638.         clr.l    (a0)+            cursorX/Xbyte
  4639.         clr    (a0)            cursorY
  4640.         bra    draw_backscroll
  4641.  
  4642. * M-> , C-rollup : set-mark + end-of-buffer
  4643.         .ifdef    __EMACS
  4644. key_end_of_buffer_mark:
  4645.         bsr    key_set_mark_quiet
  4646.         bra    key_end_of_buffer
  4647.         .endif
  4648.  
  4649. * B , F1 : âoâbâtâ@é╠ì┼ÅIìsé╔ê┌ô«
  4650. key_end_of_buffer:
  4651.         bsr    end_of_buffer_sub
  4652. jump_to_page_end:
  4653.         lea    (cursorY,pc),a0
  4654.         move    d2,(a0)
  4655.         bpl    @f
  4656.         clr    (a0)
  4657. @@:
  4658.         bsr    check_column_max    ;æOé╠îàê╩Æué╔è╓îWé╚é¡ëEÆ[é╔ê┌ô«
  4659.         bra    draw_backscroll
  4660.  
  4661. * ^B : âJü[â\âïé≡î╗ì▌ò\ĪÆåé╠ëµû╩é╠ëEë║é╔ê┌ô«
  4662. key_end_of_page:
  4663.         lea    (line_buf,pc),a3
  4664.         movea.l    a3,a0
  4665.         moveq    #-1,d2
  4666. @@:
  4667.         tst.l    (a0)+
  4668.         bmi    @f            âoâbâtâ@ûûö÷
  4669.         addq    #1,d2
  4670.         cmp    (window_line,pc),d2
  4671.         bne    @b
  4672. @@:
  4673.         bra    jump_to_page_end
  4674.  
  4675. * ^F : ìsé╠ëEÆ[é╔ê┌ô«
  4676. key_end_of_line:
  4677.         bsr    get_cursor_line_buffer
  4678.         bmi    end_of_line_end
  4679.         .ifdef    __EOBCUR
  4680.             .ifdef    __EMACS
  4681.                 bra    check_column_max
  4682.             .else
  4683.                 bsr    check_column_max
  4684.                 move    (cursorY,pc),d0
  4685.                 bra    draw_line_d0
  4686.             .endif
  4687.         .else
  4688.         move    (cursorXbyte,pc),d2
  4689.         move    (cursorX,pc),d3
  4690.         moveq    #0,d1
  4691.         move.b    (a1)+,d1        d1=âoâCâgÉö
  4692.         adda    d2,a1            d2=cursorXbyte
  4693.         EndChk2    a1
  4694. @@:
  4695.         move    d3,d4            d3=cursorX
  4696.         swap    d4
  4697.         move    d2,d4
  4698.         bsr    get_char
  4699.         cmp    d1,d2
  4700.         bne    @b
  4701.  
  4702.         lea    (cursorX,pc),a0
  4703.         move.l    d4,(a0)+        cursorX/Xbyte
  4704.         .ifndef    __EMACS
  4705.             move    (a0),d0        cursorY
  4706.             bra    draw_line_d0
  4707.         .endif
  4708.         .endif
  4709. end_of_line_end:
  4710. already_help:
  4711.         rts
  4712.  
  4713. * ^J , ^] , HELP : âwâïâvò\Ī
  4714. key_help:
  4715.         lea    (bitflag,pc),a0
  4716.         tas    (a0)            HELPMODE_bit
  4717.         bmi    already_help
  4718.  
  4719.         move.l    (line_buf,pc),-(sp)
  4720.         lea    (buffer_size,pc),a0
  4721.         move.l    (a0),-(sp)        âwâïâvâüâbâZü[âWé╠ùeù╩
  4722.         move.l    #help_mes_end-help_mes_top,(a0)+
  4723.         move.l    (a0),-(sp)        ;mark_char_adr
  4724.         clr.l    (a0)+
  4725.         move.l    (a0),-(sp)        ;mark_line_adr
  4726.         clr.l    (a0)+
  4727.         move.l    (a0),-(sp)        cursorX/byte
  4728.         clr.l    (a0)+
  4729.         move.l    (a0),-(sp)        cursorY/curx_save
  4730.         clr.l    (a0)
  4731.  
  4732.         move.l    a6,-(sp)
  4733.         lea    (help_buf_struct,pc),a6
  4734.         bsr    key_beginning_of_buffer
  4735.  
  4736.         .ifndef    __EMACS
  4737.             move.b    (ins_clr_flag,pc),-(sp)
  4738.             bsr    clr_ins_led
  4739.         .endif
  4740.  
  4741.         bsr    keyinp_loop_start    ;âüâCâôâïü[âvé≡ì─ïAî─é╤Åoé╡
  4742.         lea    (cursorY,pc),a0
  4743.  
  4744.         .ifndef    __EMACS
  4745.             bsr    restore_ins_led
  4746.             move.b    (sp)+,(ins_clr_flag-cursorY,a0)
  4747.         .endif
  4748.  
  4749.         movea.l    (sp)+,a6
  4750.         bclr    #HELPMODE_bit,(bitflag-cursorY,a0)
  4751.         move.l    (sp)+,(a0)        ;cursorY/curx_save
  4752.         move.l    (sp)+,-(a0)        ;cursorX/byte
  4753.         move.l    (sp)+,-(a0)        ;mark_line_adr
  4754.         move.l    (sp)+,-(a0)        ;mark_char_adr
  4755.         move.l    (sp)+,-(a0)        buffer_size
  4756.  
  4757.         movea.l    (sp)+,a0
  4758.         bsr    reset_line_address_buf_2
  4759.         bsr    draw_backscroll
  4760.         bra    initialize_keypast_buffer
  4761. **        rts
  4762.  
  4763.  
  4764. * Æ╟ë┴ï@ö\ ------------------------------------ *
  4765.  
  4766. * C-= : âoâbâtâ@ê╩Æuò\Ī
  4767. * "line:$00000000 char:$00000000 column:$00/$00 code:$0000"
  4768.  
  4769.         .ifdef    __BUF_POS
  4770. key_buffer_position:
  4771.         lea    (general_work,pc),a1
  4772.         lea    (buf_pos_line,pc),a0
  4773.         bsr    str_copy
  4774.         move.l    a1,d0
  4775.         bsr    get_cursor_line_buffer
  4776.         bmi    buffer_position_end    ;û{ôûé╔òKùvé⌐?
  4777.         exg    d0,a1
  4778.         movea.l    d0,a2            ;d0 = a2 = line
  4779.         bsr    to_hex
  4780.  
  4781. **        lea    (buf_pos_char,pc),a0
  4782.         bsr    str_copy
  4783.         addq.l    #1,a2
  4784.         adda    (cursorXbyte,pc),a2
  4785.         EndChk2    a2            ;a2 = char
  4786.         move.l    a2,d0
  4787.         bsr    to_hex
  4788.  
  4789. **        lea    (buf_pos_col1,pc),a0
  4790.         bsr    str_copy
  4791.         lea    (cursorX,pc),a3
  4792.         moveq    #0,d0
  4793.         move    (a3),d0
  4794.         bsr    to_hex
  4795.  
  4796. **        lea    (buf_pos_col2,pc),a0
  4797.         bsr    str_copy
  4798.         move.l    (a3),-(sp)        ;X/Xbyte ò█æ╢
  4799.         PUSH    a0-a3            ;end-of-line é╞ô»é╢Åêù¥é≡é╡é─
  4800.         bsr    check_column_max    ;ì┼æσîàê╩Æué≡ïüé▀éΘ
  4801.         POP    a0-a3
  4802.         moveq    #0,d0
  4803.         move    (a3),d0
  4804.         move.l    (sp)+,(a3)        ;X/Xbyte ò£ïA
  4805.         bsr    to_hex
  4806.  
  4807. **        lea    (buf_pos_code,pc),a0
  4808.         bsr    str_copy
  4809.         exg    a1,a2            ;a1 = char
  4810.         bsr    get_char        ;d0 = code
  4811.         lea    (a2),a1
  4812.         bsr    to_hex
  4813.  
  4814.         lea    (general_work,pc),a1
  4815.         bra    print_message
  4816. buffer_position_end:
  4817.         rts
  4818.  
  4819. buf_pos_line:    .dc.b    'line:$',0
  4820. buf_pos_char:    .dc.b    ' char:$',0
  4821. buf_pos_col1:    .dc.b    ' column:$',0
  4822. buf_pos_col2:    .dc.b    '/$',0
  4823. buf_pos_code:    .dc.b    ' code:$',0
  4824.         .even
  4825.  
  4826. * ÉöÆlé≡ 16 ÉiÉöò╢ÄÜù±é╔ò╧è╖é╖éΘ.
  4827. * in    d0.l    ÉöÆl
  4828. *    a1.l    ò╢ÄÜù±é≡Åæé½ì₧é▐âoâbâtâ@
  4829. * out    a1.l    NUL é╠âAâhâîâX
  4830. * break    d0.l
  4831. * Ädùl:    ò╢ÄÜù±é╠ûûö÷é╔é═ NUL é¬Åæé½ì₧é▄éΩéΘ.
  4832. *    Åπê╩é╠ 0 é═Å╚ù¬é│éΩéΘ.
  4833.  
  4834. usereg:        .reg    d1
  4835. to_hex:
  4836.         move.l    usereg,-(sp)
  4837.         clr    -(sp)            ;ö╘ò║(NUL é≡îôé╦éΘ)
  4838. to_hex_loop:
  4839.         moveq    #$f,d1            ;ë║ê╩îàé⌐éτĵéΦÅoé╖
  4840.         and    d0,d1
  4841.         addi    #'0',d1
  4842.         cmpi    #'9',d1
  4843.         bls    @f
  4844.         .ifdef    __UPPER
  4845.         addq    #'A'-('9'+1),d1
  4846.         .else
  4847.         addi    #'a'-('9'+1),d1
  4848.         .endif
  4849. @@:
  4850.         move.b    d1,-(sp)        ;âXâ^âbâNÅπé╔ù¡é▀éΘ
  4851.         lsr.l    #4,d0
  4852.         bne    to_hex_loop
  4853. * d0.l = $1a0 é╠ÅΩìç
  4854. * sp:    .dc    '1'<<8, 'a'<<8, '0'<<8, 0
  4855. to_hex_loop2:
  4856.         move.b    (sp)+,(a1)+        ;Åπê╩îàé⌐éτâoâbâtâ@é╔ô]æùé╖éΘ
  4857.         bne    to_hex_loop2
  4858.         subq.l    #1,a1
  4859.         move.l    (sp)+,usereg
  4860.         rts
  4861.  
  4862.         .endif    /* __BUF_POS */
  4863.  
  4864. * C-l : ëµû╩ì─ò`ëµ
  4865.  
  4866.         .ifdef    __EMACS
  4867. key_redraw_window:
  4868.         bsr    clear_text_plane    ;âoâbâNâìâOëµû╩ôhéΦé┬é╘é╡
  4869.         bsr    draw_window_tipline    ;ÅπÆ[é╞ë║Æ[é╠ëíÉⁿé≡ò`é¡
  4870.         .if    0
  4871.         bra    draw_backscroll
  4872. **        rts
  4873.         .else
  4874.         bsr    get_cursor_line_buffer
  4875.         st    (a3)            ;âJü[â\âïìsé≡Æåë¢é╔ò\Īé╖éΘ
  4876.         move    (cursorX,pc),d3
  4877.         move    (cursorXbyte,pc),d2
  4878.         bra    jump_scroll
  4879. **        rts
  4880.         .endif
  4881.         .endif
  4882.  
  4883.  
  4884. * C-bs : âoâbâtâ@âèâôâOÆåÄ~üEì─èJ
  4885.  
  4886. key_toggle_buffering_mode:
  4887.         bsr    toggle_buffering_mode
  4888.         bra    display_system_status
  4889.  
  4890. toggle_buffering_mode:
  4891.         PUSH    d0-d1/a0
  4892.         lea    (condrv_put_char,pc),a0
  4893.         eori    #RTS.xor.MOVEM,(a0)
  4894.  
  4895.         cmpi.b    #1,(MPUTYPE)
  4896.         bls    @f
  4897.  
  4898.         moveq    #3,d1
  4899.         IOCS    _SYS_STAT
  4900. @@:
  4901.         POP    d0-d1/a0
  4902. insert_file_cancel:
  4903.         rts
  4904.  
  4905. * C-clr : âoâbâtâ@Åëè·ë╗
  4906.  
  4907. key_clear_buffer:
  4908.         lea    (mark_char_adr,pc),a0
  4909.         clr.l    (a0)+            ;mark_char_adr
  4910.         clr.l    (a0)+            ;mark_line_adr
  4911.  
  4912.         bsr    initialize_backscroll_buffer
  4913.         bra    key_beginning_of_buffer
  4914.  
  4915. * ^Y : âtâ@âCâïô╟é▌ì₧é▌
  4916. key_insert_file:
  4917.         move.b    (bitflag,pc),d0
  4918.         bmi    insert_file_cancel    HELPò\ĪÆåé═Ägùpòsë┬
  4919.  
  4920.         lea    (insert_file_prompt,pc),a1
  4921.         bsr    input_string
  4922.         beq    insert_file_cancel
  4923.         bsr    unfold_home
  4924.         bsr    check_diskready
  4925.         bmi    disk_notready_error
  4926.  
  4927.         clr    -(sp)
  4928.         move.l    a1,-(sp)
  4929.         DOS    _OPEN
  4930.         addq.l    #6,sp
  4931.         move.l    d0,d4
  4932.         bmi    fileopen_error
  4933.  
  4934.         moveq    #6,d1
  4935.         bsr    is_file_io_enable
  4936.         bne    fileread_disable
  4937.  
  4938.         lea    (io_buffer,pc),a5
  4939.         lea    (REQHEAD_SIZE,a5),a0
  4940.         move.l    a0,(DEVIO_ADDRESS,a5)
  4941. insert_file_loop:
  4942.         pea    (IOBUFSIZE)
  4943.         move.l    a0,-(sp)
  4944.         move    d4,-(sp)
  4945.         DOS    _READ
  4946.         lea    (10,sp),sp
  4947.         move.l    d0,(DEVIO_LENGTH,a5)
  4948.         ble    insert_file_end
  4949.         bsr    xcon_output
  4950.         bra    insert_file_loop
  4951. insert_file_end:
  4952.         bsr    close_filehandle_d4
  4953.         bsr    clear_mark        * _and_redraw
  4954.         bra    key_end_of_buffer
  4955.  
  4956. close_filehandle_d4:
  4957.         move    d4,-(sp)
  4958.         DOS    _CLOSE
  4959.         addq.l    #2,sp
  4960.         rts
  4961.  
  4962. * ôⁿÅoù═ë┬ö\é╚éτ d0.b=0
  4963. is_file_io_enable:
  4964.         move    d4,-(sp)
  4965.         clr    -(sp)
  4966.         DOS    _IOCTRL
  4967.         asr.b    #8,d0
  4968.         bpl    @f
  4969.  
  4970.         move    d1,(sp)
  4971.         DOS    _IOCTRL
  4972.         not.b    d0
  4973. @@:
  4974.         addq.l    #4,sp
  4975.         rts
  4976.  
  4977. * in    a1.l    âtâ@âCâïû╝
  4978. *    d0.l    0:OK -1:Error
  4979. check_diskready:
  4980.         lea    (GETSMAX+1,a1),a0
  4981.         move.l    a0,-(sp)
  4982.         move.l    a1,-(sp)
  4983.         DOS    _NAMECK
  4984.         addq.l    #8,sp
  4985.         tst.l    d0            üuâÅâCâïâhâJü[âhÄwÆΦé╚é╡üvé╛é»OK
  4986.         bne    nocheck_diskready    æ╝é═âIü[âvâôÄ₧é╔âGâëü[é¬é¿é½éΘ
  4987.         moveq    #0,d1
  4988. @@:        move.b    (a0),d1
  4989.         subi.b    #'A'-1,d1        DRVCTRLé╖éΘâhâëâCâu
  4990.  
  4991.         clr.b    (2,a0)
  4992.         move.l    a0,-(sp)
  4993.         move.l    a0,-(sp)
  4994.         clr    -(sp)
  4995.         DOS    _ASSIGN
  4996.         lea    (10,sp),sp
  4997.         cmpi    #$50,d0
  4998.         beq    @b            ë╝æzâhâëâCâué╠Éeé≡é╜é╟éΘ
  4999.  
  5000.         move    d1,-(sp)        MD=0
  5001.         DOS    _DRVCTRL
  5002.         addq.l    #2,sp
  5003.         tst.l    d0
  5004.         bmi    disk_notready
  5005.         lsr    #1,d0
  5006.         bcs    disk_notready        âüâfâBâAîδæ}ôⁿ
  5007.         lsr    #1,d0
  5008.         bcc    disk_notready        æ}ôⁿé│éΩé─éóé╚éó
  5009. nocheck_diskready:
  5010.         moveq    #0,d0
  5011.         rts
  5012. disk_notready:
  5013.         moveq    #-1,d0
  5014.         rts
  5015.  
  5016. filewrite_disable:
  5017.         move    #'Åo',d0
  5018.         bra    @f
  5019. fileread_disable:
  5020.         move    #'ôⁿ',d0
  5021. @@:
  5022.         lea    (file_io_disable_mes,pc),a1
  5023.         move    d0,(a1)
  5024.         bsr    close_filehandle_d4
  5025.         bra    1f
  5026.  
  5027. fileopen_error:
  5028.         lea    (fopen_err_mes_tbl,pc),a1
  5029.         move.b    d0,(fopen_err_mes-fopen_err_mes_tbl,a1)
  5030. check_open_err:
  5031.         cmp.b    (a1)+,d0
  5032.         beq    1f
  5033. @@:        tst.b    (a1)+
  5034.         bne    @b
  5035.         bra    check_open_err
  5036.  
  5037. disk_notready_error:
  5038.         lea    (disk_notready_mes,pc),a1
  5039. 1:
  5040.         bra    print_message
  5041.  
  5042. * âtâ@âCâïû╝ɵô¬é╠ ~/ ïyé╤ ~\ é≡ $HOME é╔ôWèJé╖éΘ.
  5043. * in    a1.l    âtâ@âCâïû╝
  5044. * break    d0
  5045.  
  5046. unfold_home:
  5047.         movem.l    a0-a2,-(sp)
  5048.         lea    (a1),a0
  5049.         cmpi.b    #'~',(a0)+
  5050.         bne    unfold_home_skip
  5051.         cmpi.b    #'/',(a0)        ;~/
  5052.         beq    @f
  5053.         cmpi.b    #'\',(a0)        ;~\
  5054.         bne    unfold_home_skip
  5055. @@:
  5056.         lea    (-(256+256),sp),sp
  5057.         pea    (sp)            ;è┬ï½ò╧Éö HOME é╠Ælé≡Ä√ô╛
  5058.         clr.l    -(sp)
  5059.         pea    (env_home,pc)
  5060.         DOS    _GETENV
  5061.         addq.l    #12-4,sp
  5062.         move.l    d0,(sp)+
  5063.         bne    unfold_home_skip2
  5064.  
  5065.         lea    (sp),a2
  5066.         STRCAT    a0,a2            ;'/'ê╚ì~é≡ÿAîïé╖éΘ
  5067.         lea    (sp),a0
  5068.         lea    (a1),a2
  5069.         STRCPY    a0,a2            ;î│é╠âoâbâtâ@é╔ô]æù
  5070. unfold_home_skip2:
  5071.         lea    (256+256,sp),sp
  5072. unfold_home_skip:
  5073.         movem.l    (sp)+,a0-a2
  5074.         rts
  5075.  
  5076.  
  5077.         .ifndef    __EMACS
  5078. * L : âëâxâïÆΦï`(âJü[â\âïê╩Æué═ì╢Æ[)
  5079. key_set_label:
  5080.         lea    (define_label_mes,pc),a0
  5081.         moveq    #0,d0
  5082.         bsr    print_label_mes
  5083.         bsr    get_key_a_z
  5084.         bhi    define_label_end
  5085.  
  5086.         lsl    #2,d0
  5087.         lea    (label_buffer,pc),a0
  5088.         adda    d0,a0            èiö[ɵ
  5089.  
  5090.         move    (cursorY,pc),d0
  5091.         lsl    #2,d0
  5092.         lea    (line_buf,pc),a1
  5093.         adda    d0,a1            ò█æ╢î│
  5094.  
  5095.         move.l    (a1),(a0)+
  5096. define_label_end:
  5097. jump_label_end:
  5098.         rts
  5099.  
  5100. * Shift + 7 (') : ÄwÆΦâëâxâïé▄é┼ê┌ô«
  5101. key_jump_label:
  5102.         lea    (jump_label_mes,pc),a0
  5103.         moveq    #-1,d0
  5104.         bsr    print_label_mes
  5105.         bsr    get_key_a_z
  5106.         bhi    jump_label_end
  5107.  
  5108.         lsl    #2,d0
  5109.         lea    (label_buffer,pc),a0
  5110.         adda    d0,a0
  5111.         move.l    (a0),d1
  5112.         beq    jump_label_end        ûóÆΦï`é╠âëâxâï
  5113.         movea.l    d1,a0            Jumpɵ
  5114.  
  5115.         movea.l    (buffer_now,a6),a1
  5116.         bra    @f
  5117. jump_label_loop
  5118.         subq.l    #1,a1
  5119.         TopChk    a1
  5120.         move.b    (a1),d0
  5121.         beq    jump_label_end        âoâbâtâ@é╠ɵô¬é▄é┼ìsé┴é╜
  5122.         subq.l    #1,a1
  5123.         suba    d0,a1
  5124.         TopChk    a1
  5125. @@:
  5126.         cmpa.l    a0,a1
  5127.         bne    jump_label_loop
  5128.  
  5129.         moveq    #0,d2
  5130.         moveq    #0,d3
  5131.         bra    jump_scroll
  5132.  
  5133. print_label_mes:
  5134.         lea    (general_work,pc),a1
  5135.         bsr    str_copy
  5136.  
  5137.         moveq    #'A',d1
  5138.         lea    (label_buffer,pc),a0
  5139. label_print_loop:
  5140.         tst.l    (a0)+
  5141.         sne    -(sp)
  5142.         cmp.b    (sp)+,d0
  5143.         bne    @f
  5144.  
  5145.         move.b    d1,(a1)+
  5146. @@:
  5147.         addq.b    #1,d1
  5148.         cmpi.b    #'Z',d1
  5149.         bls    label_print_loop
  5150.  
  5151.         lea    (label_mes_end,pc),a0
  5152.         bsr    str_copy
  5153.         lea    (general_work,pc),a1
  5154.         bra    print_message
  5155.  
  5156. get_key_a_z:
  5157.         bsr    get_key_sub
  5158.         andi    #$df,d0
  5159.         subi    #'A',d0
  5160.         cmpi    #'Z'-'A',d0
  5161.         rts
  5162.  
  5163.         .endif
  5164.  
  5165. str_copy:
  5166.         move.b    (a0)+,(a1)+
  5167.         bne    str_copy
  5168.         subq.l    #1,a1
  5169.         rts
  5170.  
  5171. get_key_sub:
  5172.         suba.l    a1,a1
  5173. get_key_sub_loop:
  5174.         IOCS    _ONTIME
  5175.         cmp.l    a1,d0
  5176.         bcs    @f
  5177.  
  5178.         bsr    blink_cursor_direct
  5179.         IOCS    _ONTIME
  5180.         lea    (BLINKCYCLE),a1
  5181.         adda.l    d0,a1
  5182. @@:
  5183.         bsr    call_orig_b_keysns
  5184.         tst.l    d0
  5185.         beq    get_key_sub_loop
  5186.  
  5187.         bsr    call_orig_b_keyinp
  5188.         tst.b    d0
  5189.         beq    get_key_sub_loop
  5190.  
  5191.         bra    clear_message        âvâìâôâvâgé≡Å┴é╖
  5192.  
  5193. * Q : É▌ÆΦò╧ìX
  5194. key_toggle_buffer_mode:
  5195.         lea    (toggle_buffer_mode_mes,pc),a1
  5196.         bsr    print_message
  5197.         bsr    get_key_sub
  5198.         ori.b    #$20,d0
  5199.  
  5200.         .irpc    %a,trbeicx
  5201.         cmpi.b    #'&%a',d0
  5202.         beq    toggle_buffer_mode_%a
  5203.         .endm
  5204.         rts
  5205.  
  5206. * ò\ĪÅ≤æ╘é¬ò╧éφéΘâtâëâO
  5207. key_toggle_tab_disp:
  5208. toggle_buffer_mode_t:
  5209.         lea    (option_t_flag,pc),a0    Tabò\Ī
  5210.         bra    @f
  5211. key_toggle_cr_disp:
  5212. toggle_buffer_mode_r:
  5213.         lea    (option_r_flag,pc),a0    R:ëⁿìsò\Ī
  5214.         bra    @f
  5215. @@:
  5216.         not.b    (a0)
  5217.         bra    draw_backscroll
  5218.  
  5219. * ò\Īé╔é═è╓îWé╚éóâtâëâO
  5220.  
  5221. * B(-nb:BSÅêù¥)
  5222. toggle_buffer_mode_b:
  5223. toggle_option_nb:
  5224.  
  5225. PUT_BS_TBL:    .reg    (putbuf_ctrl_table+BS*2)
  5226. PUT_BS:        .equ    (putbuf_bs-putbuf_ctrl_table)
  5227. PUT_BS_NB:    .equ    (putbuf_bs_nb-putbuf_ctrl_table)
  5228.  
  5229.         lea    (PUT_BS_TBL,pc),a0
  5230.         eori    #PUT_BS.xor.PUT_BS_NB,(a0)
  5231.  
  5232.         not.b    (option_nb_flag-PUT_BS_TBL,a0)
  5233.         rts
  5234.  
  5235. * E(-ne:ESCìφÅ£)
  5236. toggle_buffer_mode_e:
  5237. toggle_option_ne:
  5238.  
  5239. PUT_ESC_TBL:    .reg    (putbuf_ctrl_table+ESC*2)
  5240. PUT_ESC:    .equ    (putbuf_esc-putbuf_ctrl_table)
  5241. PUT_ESC_NE:    .equ    (putbuf_esc_ne-putbuf_ctrl_table)
  5242.  
  5243.         lea    (PUT_ESC_TBL,pc),a0
  5244.         eori    #PUT_ESC.xor.PUT_ESC_NE,(a0)
  5245.  
  5246.         not.b    (option_ne_flag-PUT_ESC_TBL,a0)
  5247.         rts
  5248.  
  5249. * I(-nt:TABò╧è╖)
  5250. toggle_buffer_mode_i:
  5251. toggle_option_nt:
  5252.  
  5253. PUT_TAB_TBL:    .reg    (putbuf_ctrl_table+TAB*2)
  5254. PUT_TAB:    .equ    (putbuf_tab-putbuf_ctrl_table)
  5255. PUT_TAB_NT:    .equ    (putbuf_tab_nt-putbuf_ctrl_table)
  5256.  
  5257.         lea    (PUT_TAB_TBL,pc),a0
  5258.         eori    #PUT_TAB.xor.PUT_TAB_NT,(a0)
  5259.  
  5260.         not.b    (option_nt_flag-PUT_TAB_TBL,a0)
  5261.         rts
  5262.  
  5263. * C(-nc:ɺîΣïLìåìφÅ£)
  5264. toggle_buffer_mode_c:
  5265. toggle_option_nc:
  5266.  
  5267. PUT_CTRL:    .equ    (putbuf_ctrl-putbuf_ctrl_table)
  5268. PUT_CTRL_NC:    .equ    (putbuf_ctrl_nc-putbuf_ctrl_table)
  5269.  
  5270.         move.l    #PUT_CTRL_LIST,d0
  5271.         lea    (putbuf_ctrl_table,pc),a0
  5272. toggle_option_nc_loop:
  5273.         lsr.l    #1,d0
  5274.         bcc    @f
  5275.         eori    #PUT_CTRL.xor.PUT_CTRL_NC,(a0)
  5276. @@:        addq.l    #2,a0
  5277.  
  5278.         tst.l    d0
  5279.         bne    toggle_option_nc_loop
  5280.  
  5281.         lea    (option_nc_flag,pc),a0
  5282.         not.b    (a0)
  5283.         rts
  5284.  
  5285. toggle_buffer_mode_x:
  5286.         lea    (case_table+'a',pc),a0    X:îƒì⌡Ä₧é╠æσò╢ÄÜżò╢ÄÜé╠ïµò╩ON/OFFÉ╪éΦè╖éª
  5287.         not.b    (option_x_flag-(case_table+'a'),a0)
  5288.  
  5289.         moveq    #'z'-'a',d0
  5290. 1:        eori.b    #$20,(a0)+
  5291.         dbra    d0,1b
  5292.         rts
  5293.  
  5294. * Shift + Q : É▌ÆΦò╧ìXé╗é╠éQ(-m?)
  5295. key_toggle_text_mode:
  5296.         lea    (toggle_text_mode_mes,pc),a1
  5297.         bsr    print_message
  5298.         bsr    get_key_sub
  5299.         lea    (option_m_flag,pc),a0
  5300.         subi.b    #'1',d0
  5301.         cmpi.b    #'4'-'1',d0
  5302.         bhi    toggle_text_mode_end
  5303.         beq    toggle_text_mode_4
  5304.         cmpi.b    #'3'-'1',d0
  5305.         beq    toggle_text_mode_3
  5306.  
  5307.         bchg    d0,(a0)            ;1:â}âEâXɺîΣ 2:âeâLâXâgò█æ╢
  5308. toggle_text_mode_end:
  5309.         rts
  5310.  
  5311. toggle_text_mode_4:
  5312.         bchg    d0,(a0)            ;4:âJü[â\âïɺîΣù}ɺ
  5313.         lea    (iocs_curflg,pc),a0
  5314.         bne    @f
  5315.         move    (a0),(CSRSWITCH)    ;ɺîΣé╖éΘ -> ÉºîΣé╡é╚éó
  5316.         rts
  5317. @@:        move    (CSRSWITCH),(a0)    ;ɺîΣé╡é╚éó -> ÉºîΣé╖éΘ
  5318.         IOCS    _OS_CUROF
  5319.         rts
  5320.  
  5321. toggle_text_mode_3:
  5322.         bchg    d0,(a0)            ;3:âeâLâXâgÄgùpÅ≤ï╡û│Äï
  5323.         bne    toggle_text_mode_end
  5324.         bra    gm_tgusemd_orig_tm1
  5325.  
  5326. gm_tgusemd_orig_tm1:
  5327.         moveq    #1,d2
  5328. gm_tgusemd_orig:
  5329.         move.l    #_GM_INTERNAL_MODE<<16+1,d1
  5330.         IOCS    _TGUSEMD
  5331.         rts
  5332.  
  5333. * êΩìsâXâNâìü[âïé╡é─âÅü[âNìXÉVüòò`ëµ ---------- *
  5334.  
  5335. * in    d0.w    ÉVé╡éóì┼ÅπÆiìsé╠âoâCâgÉö
  5336. *    a1.l    üV        ûûö÷é╠âoâCâgÉöèiö[ê╩Æu
  5337. *    a3.l    line_buf
  5338.  
  5339. scroll_down_sub:
  5340.         movea.l    a3,a0
  5341.         move    (window_line,pc),d2
  5342.         move    d2,d1
  5343.         addq    #1,d1
  5344.         lsl    #2,d1
  5345.         adda    d1,a0
  5346.         lea    (-4,a0),a2
  5347.         move    d2,d1
  5348.         subq    #1,d1
  5349. @@:
  5350.         move.l    -(a2),-(a0)
  5351.         dbra    d1,@b
  5352.         suba    d0,a1
  5353.         subq.l    #1,a1
  5354.         TopChk    a1
  5355.         move.l    a1,(a2)
  5356.  
  5357.         move    d2,d0
  5358.         lsl    #2,d0            d0éαê╙ûíé¬éáéΘé╠é┼Æìê╙
  5359.         move.b    d0,d1
  5360.         subq    #1,d1
  5361.         lsl    #8,d1
  5362.         move.b    d0,d1
  5363.         addq.b    #4-1,d1
  5364.         add    (text_ras_no,pc),d1
  5365.         bra    rascpy_down
  5366.  
  5367. scroll_up_sub:
  5368.         movea.l    a3,a0
  5369.         move    (window_line,pc),d0
  5370.         subq    #1,d0
  5371.         lea    (4,a0),a2
  5372. @@:
  5373.         move.l    (a2)+,(a0)+
  5374.         dbra    d0,@b
  5375.         move.l    a1,(a0)
  5376.         bra    rascpy_up_all
  5377.  
  5378.  
  5379. * âJü[â\âïê╩Æué╠òΓÉ│ -------------------------- *
  5380.  
  5381. * ò█æ╢é╡é─é¿éóé╜îàê╩Æué▄é┼ëEé╔ê┌ô«é╖éΘ.
  5382. check_column_pop_curx:
  5383.         lea    (cursorX,pc),a4
  5384.         move    (curx_save,pc),(a4)
  5385.         bra    check_column
  5386.  
  5387. * î╗ì▌é╠ìsé╠ëEÆ[é▄é┼ê┌ô«é╖éΘ.
  5388. check_column_max:
  5389.         lea    (cursorX,pc),a4
  5390.         st    (a4)
  5391.         bra    check_column
  5392.  
  5393. * ìíé▄é┼é╞ô»é╢âJü[â\âïîàê╩Æué▄é┼ëEé╔ê┌ô«é╖éΘ.
  5394. check_column:
  5395.         lea    (cursorX,pc),a4
  5396.         moveq    #0,d4
  5397.         bsr    get_cursor_line_buffer
  5398.         bmi    check_column_end
  5399.  
  5400.         moveq    #0,d3
  5401.         moveq    #0,d2
  5402.         moveq    #0,d1
  5403.         move.b    (a1)+,d1
  5404.         EndChk    a1
  5405. check_column_loop:
  5406.         cmp    d1,d2
  5407.         .ifdef    __EOBCUR
  5408.             beq    check_column_end2
  5409.         .else
  5410.             beq    check_column_end
  5411.         .endif
  5412.         move    d3,d4
  5413.         swap    d4
  5414.         move    d2,d4
  5415.         bsr    get_char
  5416.         cmp    (a4),d3            ;cursorX
  5417.         bls    check_column_loop
  5418. check_column_end:
  5419.         move.l    d4,(a4)
  5420.         rts
  5421.  
  5422.         .ifdef    __EOBCUR
  5423. check_column_end2:
  5424.         tst.b    (a1)
  5425.         bne    check_column_end
  5426.         move    d3,d4
  5427.         swap    d4
  5428.         move    d2,d4
  5429.         bra    check_column_end
  5430.         .endif
  5431.  
  5432. * êΩò╢ÄÜÄ√ô╛é╖éΘ ------------------------------ *
  5433. *    d0.w    ò╢ÄÜ
  5434. *    d2.w    ìsô¬é⌐éτé╠âoâCâgÉö
  5435. *    d3.w    ìsô¬é⌐éτé╠îàÉö(2âoâCâgö╝èpò╢ÄÜé═1é╞é╡é─è╖ÄZé│éΩéΘ)
  5436. *    a1.l    âoâbâtâ@â|âCâôâ^
  5437.  
  5438. get_char:
  5439.         moveq    #0,d0
  5440.         move.b    (a1)+,d0
  5441.         beq    get_char_endofbuf
  5442.         addq    #1,d2
  5443.         EndChk    a1
  5444.         tst.b    d0
  5445.         bpl    get_char_1byte        ;ASCII
  5446.         cmpi.b    #$a0,d0
  5447.         bcs    get_char_2byte        ;MS-Kanji
  5448.         cmpi.b    #$e0,d0
  5449.         bcs    get_char_1byte        ;1byte Kana
  5450. get_char_2byte:
  5451.         lsl    #8,d0
  5452.         addq    #1,d2
  5453.         move.b    (a1)+,d0
  5454.         .if    1
  5455. * ô±âoâCâgò╢ÄÜé╠Åπê╩âoâCâgé╛é»é¬âoâbâtâ@ûûö÷é╔ôⁿé┴é─éóé╜ÅΩìç
  5456. * é╠û\æûæ╬ì⌠. Æ╩Åφé═ùLéΦô╛é╚éóé¬üAêΩë₧öOé╠ê╫.
  5457.         bne    @f
  5458.         lsr    #8,d0
  5459.         subq    #1,d2
  5460.         bra    get_char_1byte
  5461. @@:
  5462.         .endif
  5463.         EndChk    a1
  5464. get_char_1byte:
  5465.         cmpi    #TAB,d0
  5466.         bne    @f
  5467.         ori    #7,d3
  5468. @@:
  5469.         addq    #1,d3
  5470.         cmpi    #$8140,d0
  5471.         bcs    @f
  5472.         cmpi    #$8540,d0
  5473.         bcs    get_char_wide        8140ü`853fé▄é┼æSèp
  5474.         cmpi    #$869f,d0
  5475.         bcs    @f
  5476.         cmpi    #$f000,d0
  5477.         bcc    @f
  5478. get_char_wide:
  5479.         addq    #1,d3            869fü`efffé▄é┼æSèp
  5480. @@:        rts
  5481.  
  5482. get_char_endofbuf:
  5483.         subq.l    #1,a1
  5484.         rts
  5485.  
  5486. * âëâXâ^âRâsü[î─é╤Åoé╡ ------------------------ *
  5487.  
  5488. rascpy_up_all:
  5489.         move    (window_line,pc),d0
  5490.         move    #$0400,d1
  5491. rascpy_up_shl2:
  5492.         lsl    #2,d0
  5493. rascpy_up:
  5494.         add    (text_ras_no,pc),d1    âëâXâ^ö╘ìå
  5495.         move    #$101,d2
  5496.         bra    @f
  5497. rascpy_down:
  5498.         move    #$feff,d2
  5499. @@:
  5500.         move.l    a3,-(sp)
  5501.         lea    (CRTC_R21),a3
  5502.         move    (a3),-(sp)
  5503.         move    #%1_0000_1100,(a3)
  5504.         bsr    txrascpy_sub
  5505.         move    (sp)+,(a3)
  5506.         movea.l    (sp)+,a3
  5507.         rts
  5508.  
  5509. * âoâbâNâXâNâìü[âïëµû╩é╠ì┼ë║ìsé≡Å┴é╡é─ìsôⁿù═é≡é╖éΘ
  5510. * in    a1.l    âvâìâôâvâgé╞é╡é─ò\Īé╖éΘò╢ÄÜù±
  5511. * out    a1.l    ôⁿù═âoâbâtâ@é╠ɵô¬+2(ôⁿù═é│éΩé╜ò╢ÄÜù±)
  5512. *    ccrZ    ôⁿù═ò╢ÄÜÉö鬠0 é╚éτ ccrZ=1
  5513. input_string:
  5514. usereg:        .reg    d1-d7/a2-a5
  5515.         PUSH    usereg
  5516.  
  5517. *        lea    (condrv_put_char,pc),a5
  5518. *        bset    #GETSS_bit,(bitflag-condrv_put_char,a5)
  5519. *        cmpi    #RTS,(a5)
  5520. *        seq    -(sp)
  5521. *        beq    @f
  5522. *        bsr    toggle_buffering_mode
  5523. *@@:
  5524.         lea    (stop_level,pc),a5
  5525.         move    (a5),-(sp)        ;push stop_level
  5526.         st    (a5)
  5527.  
  5528.         move.l    (TXADR),-(sp)        ;IOCSworkæ╥ö≡
  5529.         move.l    (TXSTOFST),-(sp)
  5530.         move.l    (CSRXMAX),-(sp)        ;& CSRYMAX
  5531.         move.l    (CSRX),-(sp)        ;& CSRY
  5532.         move.b    (FIRSTBYTE),-(sp)
  5533.         move.b    (TXCOLOR),(1,sp)
  5534.         move.b    (LEDSTAT),-(sp)
  5535.  
  5536. ;âeâLâXâgé≡æ╥ö≡
  5537.         move    (window_line,pc),d0
  5538.         add    (down_line,pc),d0
  5539.         addq    #2,d0
  5540.         move    d0,-(sp)        ;!
  5541.         mulu    #(128*16),d0
  5542.  
  5543.         lea    (TEXT_VRAM),a2
  5544.         move.l    a2,(TXADR)        ;T-VRAMâAâhâîâX(âvâîü[âôé╠ÄwÆΦ)
  5545.         move.l    d0,(TXSTOFST)        ;ò\ĪâAâhâîâXâIâtâZâbâg
  5546.         adda.l    d0,a2
  5547.         lea    (line_store_buf+128*16*2,pc),a3
  5548.         bsr    move_textblock        ;plane0æ╥ö≡
  5549.         adda.l    #$20000-128*16,a2
  5550.         bsr    move_textblock        ;     1
  5551. *        move.l    a2,-(sp)
  5552. *        move.l    a3,-(sp)
  5553.  
  5554. ;èYôûìsé≡âNâèâA
  5555.         move.l    #(WIDTH-1).shl.16+0,(CSRXMAX)
  5556.         clr.b    (FIRSTBYTE)
  5557.         moveq    #2,d1
  5558.         IOCS    _B_CLR_ST        ëµû╩æSæ╠é≡Å┴ïÄ
  5559.         move.b    #2,(TXCOLOR)        É┬é┼ò\Ī
  5560.         IOCS    _B_PRINT        prompt
  5561.         addq.b    #1,(TXCOLOR)        öÆ
  5562.  
  5563.         move    (sp)+,d1        ;!
  5564.         lsl    #2,d1
  5565.         .if    0
  5566.         bsr    clear_text_raster_m4    ;ôⁿù═ìsé╠â}âEâXâvâîü[âôé≡âNâèâAé╖éΘ
  5567.         .else
  5568.         moveq    #0,d0            ;â}âXâNé═ò`é½Æ╝é│é╚éó
  5569.         moveq    #4-1,d2
  5570.         bsr    clear_text_raster
  5571.         .endif
  5572.  
  5573.         .if    0
  5574.         bsr    gm_inactive
  5575.         .endif
  5576.         bsr    fep_enable
  5577.  
  5578.         btst    #3,(option_m_flag,pc)
  5579.         bne    @f
  5580.         IOCS    _OS_CURON
  5581. @@:
  5582.         lea    (general_work,pc),a1
  5583.         move    #GETSMAX.shl.8,(a1)
  5584.         move.l    a1,-(sp)
  5585.         DOS    _GETSS
  5586.         addq.l    #4,sp
  5587.  
  5588.         btst    #3,(option_m_flag,pc)
  5589.         bne    @f
  5590.         IOCS    _OS_CUROF
  5591. @@:
  5592.         bsr    fep_disable
  5593.         .if    0
  5594.         bsr    gm_active
  5595.         .endif
  5596.         bsr    clear_message        ;â}âEâXâvâîü[âôé╠ò£ïA
  5597.  
  5598. * æ╥ö≡é╡é╜âeâLâXâgé≡î│é╔û▀é╖
  5599. *        movea.l    (sp)+,a2
  5600. *        movea.l    (sp)+,a3
  5601.         exg    a2,a3
  5602.         bsr    move_textblock        âvâîü[âô1 é≡ò£ïA
  5603.         suba.l    #$20000-128*16,a3
  5604.         bsr    move_textblock        üV    0
  5605.  
  5606.         move.b    (sp)+,(LEDSTAT)
  5607.         IOCS    _LEDSET
  5608.         move.b    (1,sp),(TXCOLOR)    IOCSworkò£ïA
  5609.         move.b    (sp)+,(FIRSTBYTE)
  5610.         move.l    (sp)+,(CSRX)
  5611.         move.l    (sp)+,(CSRXMAX)
  5612.         move.l    (sp)+,(TXSTOFST)
  5613.         move.l    (sp)+,(TXADR)
  5614.  
  5615. *        tst.b    (sp)+
  5616. *        bne    @f
  5617. *        bsr    toggle_buffering_mode
  5618. *@@:
  5619. *        bclr    #GETSS_bit,(bitflag-condrv_put_char,a5)
  5620.         move    (sp)+,(a5)        ;pop stop_level
  5621.  
  5622.         lea    (general_work+1,pc),a1
  5623.         tst.b    (a1)+            ôⁿù═ò╢ÄÜÉö
  5624.         POP    usereg
  5625.         rts
  5626.  
  5627. move_textblock:
  5628.         moveq    #(128*16)/(4*8)-1,d0
  5629. @@:
  5630.         movem.l    (a2)+,d1-d7/a4
  5631.         movem.l    d1-d7/a4,-(a3)
  5632.         dbra    d0,@b
  5633.         rts
  5634.  
  5635.  
  5636. * GMé╠ɺîΣò√û@é≡ò╧éªé╜ê╫üAê╚ë║é╠gm_(in)activeé═òsùvé╔é╚é┴é╜(97/09/21).
  5637.  
  5638.         .if    0
  5639.  
  5640. * GM é¬ÅφÆôé╡é─éóé╜éτêΩÄ₧ôIé╔ô«ì∞é≡ÆΓÄ~é│é╣éΘ. d0-d1/a1 öjë≤
  5641. * gm_automaské≡ÆΓÄ~âtâëâOé╔ù¼ùp.
  5642.  
  5643. gm_inactive:
  5644.         lea    (gm_automask,pc),a1
  5645.         clr.b    (a1)
  5646.  
  5647.         GMcall    _GM_VERSION_NUMBER
  5648.         bne    gm_inactive_end        ;ûóÅφÆô
  5649.  
  5650.         GMcall    _GM_ACTIVE_STATE
  5651.         tst.l    d0
  5652.         beq    gm_inactive_end        ;è∙é╔ÆΓÄ~Æå
  5653.  
  5654.         st    (a1)
  5655.         GMcall    _GM_INACTIVE
  5656. gm_inactive_end:
  5657.         rts
  5658.  
  5659. * GM é≡ÆΓÄ~é│é╣é─éóé╜éτô«ì∞é≡ì─èJé│é╣éΘ
  5660. gm_active:
  5661.         move.b    (gm_automask,pc),d0
  5662.         beq    gm_active_end        ;ÅφÆôé╡é─éóé╚éóé⌐üAï╓Ä~é╡é─éóé╚éó
  5663.         GMcall    _GM_ACTIVE
  5664. gm_active_end:
  5665. *        bra    clear_message
  5666.         rts
  5667.  
  5668.         .endif
  5669.  
  5670.  
  5671. * âoâbâNâìâOëµû╩ì┼ë║ìsé╠ò╢ÄÜù±é≡Å┴ïÄé╖éΘ ------ *
  5672.  
  5673. clear_message:
  5674. usereg:        .reg    d0-d3/a1
  5675.         PUSH    usereg
  5676.  
  5677.         move.b    (down_line+1,pc),-(sp)
  5678.         move    (sp),d1
  5679.         move.b    (sp)+,d1
  5680.         add.b    (window_line+1,pc),d1
  5681.         addq    #2,d1
  5682.         lsl    #2,d1
  5683.         moveq    #1,d2
  5684.         moveq    #%1100,d3
  5685.         IOCS    _TXRASCPY
  5686.  
  5687.         move.b    d1,-(sp)
  5688.         move    (sp),d1
  5689.         move.b    (sp)+,d1
  5690.         addq.b    #1,d1            ;é╗éΩé≡é╖é«ë║é╔âRâsü[
  5691.         moveq    #3,d2
  5692.         IOCS    _TXRASCPY
  5693.  
  5694.         lea    (mes_end_adr,pc),a1
  5695.         clr.l    (a1)
  5696.         POP    usereg
  5697.         rts
  5698.  
  5699. ; in    d1.w    ï@ö\ö╘ìå(d1.hw=-1)
  5700. ; out    d0.hw    ò╘Æl
  5701. gm_tgusemd:
  5702.         addi.l    #(_GM_INTERNAL_MODE+1).shl.16,d1
  5703.         IOCS    _TGUSEMD
  5704.         subi    #_GM_INTERNAL_MODE,d0
  5705.         rts
  5706.  
  5707. * FEP é¬âIü[âvâôÅoùêéΘéµéñé╔é╖éΘ
  5708. fep_enable:
  5709.         lea    (fepctrl_mode,pc),a4
  5710.         clr.l    (a4)
  5711.         pea    (2)            é⌐é╚è┐ÄÜò╧è╖âéü[âhé╠Ä√ô╛
  5712.         DOS    _KNJCTRL
  5713.         btst    #FEPOPEN_bit,(bitflag,pc)
  5714.         beq    @f
  5715.         move.l    d0,(a4)            ê╚æOé╠é⌐é╚è┐ÄÜò╧è╖âéü[âh
  5716. @@:
  5717. *        pea    (8)            é⌐é╚è┐ÄÜò╧è╖âéü[âhî┼ÆΦÅ≤æ╘é╠Ä√ô╛
  5718.         addq.l    #8-2,(sp)
  5719.         DOS    _KNJCTRL
  5720.         move.l    d0,-(a4)        fepctrl_lock
  5721. *        pea    (1)            î┼ÆΦë≡Å£
  5722.         subq.l    #8-1,(sp)
  5723.         pea    (7)
  5724.         DOS    _KNJCTRL
  5725.         addq.l    #8,sp
  5726.         rts
  5727.  
  5728. * FEP é╠Å≤æ╘é≡î│é╔û▀é╖
  5729. fep_disable:
  5730.         lea    (fepctrl_lock,pc),a4
  5731.         move.l    (a4)+,-(sp)
  5732.         pea    (7)
  5733.         DOS    _KNJCTRL        âìâbâNâéü[âhé≡î│é╔û▀é╖
  5734.         btst    #FEPOPEN_bit,(bitflag,pc)
  5735.         beq    @f
  5736.         move.l    (a4),(4,sp)        fepctrl_mode
  5737.         subq.l    #7-1,(sp)
  5738.         DOS    _KNJCTRL        ò╧è╖âéü[âhé≡î│é╔û▀é╖
  5739. @@:
  5740.         addq.l    #8,sp
  5741.         rts
  5742.  
  5743. * ì┼ë║ìsâüâbâZü[âWò\Ī/Å┴ïÄ ----------- *
  5744.  
  5745. * ê╚æOé╠ò\Īé╠ì┼îπé⌐éτÆ╟ë┴é┼ò╢ÄÜù±é≡ò\Īé╖éΘ
  5746. print_message_cont:
  5747. usereg        .reg    d0-d2/a0-a2
  5748.         PUSH    usereg
  5749.         movea.l    (mes_end_adr,pc),a0
  5750.         bra    print_m_loop
  5751.  
  5752. * âoâbâNâìâOëµû╩ì┼ë║ìsé╔ò╢ÄÜù±é≡ò\Īé╖éΘ
  5753. * in    a1.l = ò\Īé╖éΘò╢ÄÜù±
  5754. print_message:
  5755.         PUSH    usereg
  5756.         movea.l    (text_address,pc),a0
  5757.         move    (window_line,pc),d0
  5758.         swap    d0
  5759.         clr    d0
  5760.         lsr.l    #5,d0        *128*16
  5761.         adda.l    d0,a0        ü½ö╝èpâXâyü[âXé≡ò\Īé╡é╜é▒é╞é╔é╖éΘ
  5762.         lea    (128*(16+8)+1,a0),a0
  5763. print_m_loop:
  5764.         move    a0,d0
  5765.         cmpi.b    #WIDTH,d0    ëµû╩ëEÆ[é▄é┼éóé┴é╜éτüAé╗éΩê╚Åπò\Īé╡é╚éó
  5766.         bcc    print_message_end
  5767.  
  5768.         moveq    #0,d1
  5769.         move.b    (a1)+,d1
  5770.         beq    print_message_end
  5771.         lea    (ctype_table,pc),a2
  5772.         tst.b    (a2,d1.w)    MULTIBYTE
  5773.         bpl    @f        1byte
  5774.  
  5775.         lsl    #8,d1
  5776.         move.b    (a1)+,d1
  5777.         beq    print_message_end
  5778. @@:
  5779.         moveq    #8,d2
  5780.         IOCS    _FNTADR
  5781.         movea.l    d0,a2
  5782.         tst    d1
  5783.         bne    draw_multibyte
  5784. @@:
  5785.         move.b    (a2)+,(a0)
  5786.         lea    (128,a0),a0
  5787.         dbra    d2,@b
  5788.         lea    (-128*16+1,a0),a0
  5789.         bra    print_m_loop
  5790. print_message_end:
  5791.         lea    (mes_end_adr,pc),a1
  5792.         move.l    a0,(a1)
  5793.         POP    usereg
  5794.         rts
  5795.  
  5796. draw_multibyte:
  5797.         move.b    (a2)+,(a0)+
  5798.         move.b    (a2)+,(a0)
  5799.         lea    (128-1,a0),a0
  5800.         dbra    d2,draw_multibyte
  5801.         lea    (-128*16+2,a0),a0
  5802.         bra    print_m_loop
  5803.  
  5804. * CONDRV.SYS System Call ---------------------- *
  5805.  
  5806. condrv_system_call:
  5807. usereg        .reg    d1-d7/a0-a6
  5808.         PUSH    usereg
  5809.         lea    (syscall_table,pc),a0
  5810. @@:
  5811.         move    (a0)+,d2        address
  5812.         beq    syscall_error1
  5813.         cmp    (a0)+,d0        code
  5814.         bne    @b
  5815.         adda    d2,a0
  5816.         jsr    (a0)
  5817. syscall_return:
  5818.         POP    usereg
  5819.         rts
  5820. syscall_error1:
  5821.         moveq    #-1,d0
  5822.         bra    syscall_return
  5823.  
  5824. SYSTBL:        .macro    %callno
  5825.         .dc    syscall_%callno-($+4),$%callno
  5826.         .endm
  5827.  
  5828. syscall_table:
  5829.         SYSTBL    0000
  5830.         SYSTBL    0010
  5831.         SYSTBL    0020
  5832.         SYSTBL    0021
  5833.         SYSTBL    0022
  5834.         SYSTBL    0023
  5835.         SYSTBL    0024
  5836.         SYSTBL    ffff
  5837.         .dc    0
  5838.  
  5839. syscall_0000:
  5840.         move    #RTS,d0
  5841.         tst    d1
  5842.         beq    @f
  5843.         move    #MOVEM,d0
  5844. @@:
  5845.         lea    (condrv_put_char,pc),a1
  5846.         cmp    (a1),d0
  5847.         beq    @f
  5848.  
  5849.         bsr    toggle_buffering_mode
  5850. syscall_0010:
  5851. @@:        moveq    #0,d0
  5852.         rts
  5853.  
  5854. syscall_0020:
  5855.         lea    (key_init_orig,pc),a0
  5856.         move.l    (a0),d0            î│é╠Åêù¥âAâhâîâX
  5857.         move.l    a1,(a0)            ÉVé╡éóÅêù¥âAâhâîâXé≡É▌ÆΦ
  5858.         rts
  5859.  
  5860. syscall_0021:
  5861.         lea    (key_init_orig,pc),a0
  5862.         cmpa.l    (a0),a1            î╗ì▌é╠Åêù¥âAâhâîâXé≡É│é╡é¡Æmé┴é─éóéΘé⌐üH
  5863.         bne    syscall_error2
  5864.         move.l    a2,(a0)            ê╚æOé╠âAâhâîâXé╔û▀é╖
  5865.         moveq    #0,d0
  5866.         rts
  5867.  
  5868. syscall_0022:
  5869.         move.l    (key_init_orig,pc),d0
  5870.         rts
  5871.  
  5872. syscall_0023:
  5873.         lea    (bufmod_stack,pc),a0
  5874.         move.l    (a0)+,d0
  5875.         move.b    (a0),d3            bufmod_height
  5876.         tst    d1
  5877.         bne    syscall_0023_push
  5878.  
  5879.         subq.b    #1,d3
  5880.         bmi    syscall_0023_pop
  5881. syscall_error2:
  5882.         moveq    #-2,d0
  5883.         rts
  5884. syscall_0023_pop:
  5885.         move.b    d3,(a0)
  5886.  
  5887.         btst    d3,d0
  5888.         sne    d1
  5889.         ext    d1
  5890.         bra    syscall_0000
  5891. syscall_0023_push:
  5892.         cmpi.b    #31,d3
  5893.         beq    syscall_error2        âXâ^âbâNé¬û₧öté╚é╠é╔ PUSH é╡éµéñé╞é╡é╜
  5894.         bset    d3,d0
  5895.         lea    (condrv_put_char,pc),a1
  5896.         cmpi    #RTS,(a1)
  5897.         bne    @f
  5898.         bchg    d3,d0
  5899. @@:
  5900.         addq.b    #1,d3
  5901.         move.b    d3,(a0)
  5902.         move.l    d0,-(a0)
  5903.         moveq    #0,d0
  5904.         rts
  5905.  
  5906. syscall_0024:
  5907.         lea    (stop_level,pc),a0
  5908.         tst    d1
  5909.         beq    syscall_0024_get
  5910.         bmi    syscall_0024_minus
  5911. *syscall_0024_plus:
  5912.         cmpi    #$ffff,(a0)
  5913.         beq    syscall_0024_error
  5914.         addq    #1,(a0)
  5915.         bra    syscall_0024_get
  5916. syscall_0024_minus:
  5917.         tst    (a0)
  5918.         beq    syscall_0024_error
  5919.         subq    #1,(a0)
  5920.         bra    syscall_0024_get
  5921. syscall_0024_get:
  5922.         moveq    #0,d0
  5923.         move    (a0),d0
  5924.         rts
  5925. syscall_0024_error:
  5926.         moveq    #-1,d0
  5927.         rts
  5928.  
  5929. syscall_ffff:
  5930.         move.l    #VERSION_ID,d0
  5931.         rts
  5932.  
  5933. ; âfâoâCâXÅëè·ë╗âïü[â`âô ---------------------- *
  5934.  
  5935. general_work:
  5936. xcon_init:
  5937. usereg        .reg    d1-d7/a0-a3/a6
  5938.         PUSH    usereg
  5939.  
  5940. * condrv.sysé≡ô±Ådôoÿ^é╡é─éóé╚éóé⌐Æ▓é╫éΘ
  5941.         clr    -(sp)
  5942.         pea    (xcon_filename,pc)
  5943.         DOS    _OPEN
  5944.         addq.l    #6,sp
  5945.         move.l    d0,d1
  5946.         bmi    double_check_ok
  5947.  
  5948.         move    d1,-(sp)
  5949.         clr    -(sp)
  5950.         DOS    _IOCTRL
  5951.         addq.l    #4,sp
  5952.         tst    d0
  5953.         lea    (double_include_err_mes,pc),a2
  5954.         bmi    print_error_and_return
  5955. double_check_ok:
  5956.         lea    (option_flag,pc),a6
  5957.  
  5958. *èeÄφâeü[âuâïé╠Åëè·ë╗
  5959.         lea    (case_table+256,pc),a0
  5960.         move    #256-1,d0
  5961. @@:        move.b    d0,-(a0)
  5962.         dbra    d0,@b
  5963.  
  5964.         lea    (ctype_table+'0',pc),a0
  5965.         moveq    #10-1,d0
  5966.         moveq    #IS_HEXNUMBER+IS_DECIMAL,d1
  5967. @@:        move.b    d1,(a0)+
  5968.         dbra    d0,@b
  5969.         lea    (ctype_table+'A',pc),a0
  5970.         moveq    #6-1,d0
  5971.         moveq    #IS_HEXNUMBER,d1
  5972. @@:        move.b    d1,('a'-'A',a0)
  5973.         move.b    d1,(a0)+
  5974.         dbra    d0,@b
  5975.  
  5976.         lea    (ctype_table+$80,pc),a0
  5977.         moveq    #$20-1,d0
  5978. @@:        tas    ($e0-$80,a0)        $e0-$ff
  5979.         tas    (a0)+            $80-$9f
  5980.         dbra    d0,@b
  5981.  
  5982.         lea    (end_,pc),a3
  5983.         move.l    a3,(DEVIO_ENDADR,a5)
  5984.         movea.l    (DEVIO_ARGUMENT,a5),a2
  5985.         bsr    option_check
  5986.         bsr    initialize_keypast_buffer
  5987.  
  5988.         lea    (hook_table_top,pc),a0    èeÄφâxâNâ^âtâbâN
  5989.         move.l    (buffer_size,pc),d0
  5990.         bne    hook_loop_start        OK
  5991.  
  5992.         lea    (no_buf_err_mes,pc),a2    * -b é¬ÄwÆΦé│éΩé╚é⌐é┴é╜ÅΩìçé═ÅφÆôé╡é╚éó
  5993.         move.b    (no_mem_flag,pc),d0
  5994.         beq    print_error_and_return
  5995.         lea    (no_mem_err_mes,pc),a2    * âüâéâèé¬æ½éΦé╚éóÅΩìç
  5996. print_error_and_return:
  5997.         bsr    print_title
  5998.         lea    (a2),a1
  5999.         jsr    (a3)
  6000.         move    #$700d,d0        âGâëü[é╠ÅΩìçé═é▒é╠Ælé≡ò╘é╖éτé╡éó
  6001.         bra    devini_exit
  6002.  
  6003. hook_loop:
  6004.         movea    d0,a1
  6005.         move.l    (a0),d0
  6006.         move.l    (a1),(a0)+        î╗ì▌é╠Åêù¥âAâhâîâXé≡ò█æ╢
  6007.         lea    (top_,pc),a2
  6008.         adda    d0,a2
  6009.         move.l    a2,(a1)            ÉVé╡éóÅêù¥âAâhâîâXé≡É▌ÆΦ
  6010. hook_loop_start:
  6011.         move    (a0),d0
  6012.         bne    hook_loop
  6013.  
  6014. * ëⁿìsé╣é╕é╔âèâZâbâgé┼ì─ïNô«é╡é╜ÅΩìçé┼éαüAâ^âCâgâïé╠æOé╔êΩìsï≤é¡éµéñé╔é╖éΘ.
  6015.         movea.l    (backscroll_buf_adr,pc),a0
  6016.         movea.l    (buffer_now+4,a0),a0
  6017.         tst.b    (a0)
  6018.         beq    @f
  6019.  
  6020.         moveq    #LF,d1
  6021.         bsr    condrv_put_char_force
  6022. @@:
  6023.         bsr    print_title
  6024.  
  6025.         lea    (initmes1,pc),a1    âoâbâNâXâNâìü[âïâoâbâtâ@ü`
  6026.         jsr    (a3)
  6027.         move.l    ($1c00),d1        âoâbâtâ@ɵô¬âAâhâîâX
  6028.         bsr    print_hexadecimal
  6029.  
  6030.         move    #'-',-(sp)
  6031.         DOS    _PUTCHAR
  6032.  
  6033.         moveq    #32,d1
  6034.         add.l    (buffer_size,pc),d1
  6035.         bsr    print_kiro_decimal
  6036.  
  6037.         lea    (initmes2,pc),a1
  6038.         btst    #BUFINIT_bit,(bitflag,pc)
  6039.         beq    @f
  6040.         lea    (initmes3,pc),a1    âoâbâtâ@é≡Åëè·ë╗é╡é╜ÅΩìç
  6041. @@:        jsr    (a3)
  6042.  
  6043.         lea    (initmes4,pc),a1    âLü[â{ü[âhâoâbâtâ@ü`
  6044.         jsr    (a3)
  6045.         move.l    (pastbuf_adr,pc),d1
  6046.         bsr    print_hexadecimal
  6047.  
  6048. *        move    #'-',(sp)
  6049.         DOS    _PUTCHAR
  6050.  
  6051.         move.l    (pastbuf_size,pc),d1
  6052.         bsr    print_kiro_decimal
  6053.  
  6054.         lea    (initmes5,pc),a1    ü`èmò█é╡é▄é╡é╜
  6055.         jsr    (a3)
  6056.  
  6057.         move.l    #$e_ffff,-(sp)        ! ò\Ī
  6058.         DOS    _CONCTRL
  6059.         addq.l    #4+2,sp
  6060.  
  6061.         move.b    (option_o_flag,pc),d1
  6062.         subq.b    #3,d1            OPT.2
  6063.         bne    @f
  6064.         IOCS    $0b            OPT.2 é═âeâîârâRâôâgâìü[âïé╔é╡é╚éó
  6065. @@:
  6066.         moveq    #0,d0
  6067. devini_exit:
  6068.         POP    usereg
  6069.         rts
  6070.  
  6071. print_title:
  6072.         lea    (title_mes,pc),a1
  6073.         lea    (@f,pc),a3
  6074. @@:
  6075.         move.l    a1,-(sp)
  6076.         DOS    _PRINT
  6077.         addq.l    #4,sp
  6078. @@:
  6079.         rts
  6080.  
  6081. option_end:
  6082.         movea.l    (sp)+,a2
  6083. option_check:
  6084.         tst.b    (a2)+
  6085.         bne    option_check        Ä⌐ò¬é╠âtâ@âCâïû╝orìíî⌐é╜ê°Éö
  6086.         move.b    (a2)+,d0
  6087.         beq    @b            0,0 é┼ÅIéφéΦ
  6088.         move.l    a2,-(sp)
  6089.         cmpi.b    #'-',d0
  6090.         bne    option_end
  6091. next_option:
  6092.         move.b    (a2)+,d0
  6093.         beq    option_end
  6094.         ori.b    #$20,d0
  6095.         lea    (option_tbl,pc),a0
  6096. @@:
  6097.         move.l    (a0)+,d1
  6098.         beq    option_end        ûóÆΦï`é╠âIâvâVâçâô
  6099.         cmp.b    d0,d1
  6100.         bne    @b
  6101.         swap    d1
  6102.         adda    d1,a0
  6103.         jmp    (a0)
  6104. *ê°Éöé≡Ä¥é╜é╚éóâIâvâVâçâôé═æ▒é»é─Åæé¡é▒é╞é¬é┼é½éΘéµéñé╔üAò¬è≥îπé═
  6105. *É│Åφé╚ê°Éö            bra    next_option
  6106. *ê┘ÅφüV(ăé╠ê°Éöé▄é┼û│Äï)    bra    option_end
  6107.  
  6108. option_tbl:
  6109.         .irpc    %a,abcfhjkmnoprtvwx
  6110.         .dc    (option_%a-$-4),'&%a'
  6111.         .endm
  6112.         .dc.l    0
  6113.  
  6114. option_p:
  6115.         lea    (option_p_flag,pc),a0
  6116.         bra    @f
  6117. option_r:
  6118.         lea    (option_r_flag,pc),a0
  6119.         bra    @f
  6120. option_t:
  6121.         lea    (option_t_flag,pc),a0
  6122.         bra    @f
  6123. @@:
  6124.         not.b    (a0)
  6125.         bra    next_option
  6126.  
  6127. option_x:
  6128.         bsr    toggle_buffer_mode_x
  6129.         bra    next_option
  6130.  
  6131. option_m:
  6132.         lea    (option_m_flag,pc),a0
  6133.         bsr    get_value
  6134.         bmi    @b            ÉöÆlÅ╚ù¬Ä₧é═ö╜ô]
  6135.         move.b    d1,(a0)
  6136.         bra    next_option
  6137.  
  6138. option_n:
  6139.         move.b    (a2)+,d0
  6140.         beq    option_end
  6141.         ori.b    #$20,d0
  6142.         lea    (option_n_list,pc),a0
  6143.  
  6144.         cmp.b    (a0)+,d0        ;-nb:BS Åêù¥
  6145.         bne    @f
  6146.         bsr    toggle_option_nb
  6147.         bra    option_n
  6148. @@:
  6149.         cmp.b    (a0)+,d0        ;-nc:ɺîΣïLìåìφÅ£
  6150.         bne    @f
  6151.         bsr    toggle_option_nc
  6152.         bra    option_n
  6153. @@:
  6154.         cmp.b    (a0)+,d0        ;-ne:ESCìφÅ£
  6155.         bne    @f
  6156.         bsr    toggle_option_ne
  6157.         bra    option_n
  6158. @@:
  6159.         cmp.b    (a0)+,d0        ;-nt:TAB->SPACE
  6160.         bne    @f
  6161.         bsr    toggle_option_nt
  6162. @@:
  6163.         bra    option_n
  6164.  
  6165. option_a:
  6166.         lea    (ras_int_adr,pc),a0
  6167.         bra    @f
  6168. option_v:
  6169.         lea    (vdisp_int_adr,pc),a0
  6170. @@:
  6171.         lea    (dummy_rte,pc),a1
  6172.         move.l    a1,(a0)
  6173.         bra    next_option
  6174.  
  6175. option_h:
  6176.         lea    (default_past_header,pc),a0
  6177.         move.b    (a2)+,d0
  6178.         beq    @f            Å╚ù¬é╡é╜ÅΩìçé═ì┼Åëé⌐éτ>é¬É▌ÆΦé│éΩé─éóéΘ
  6179.         move.b    d0,(a0)
  6180. @@:
  6181.         move.b    (a0),(past_header-option_flag,a6)
  6182.         bra    option_end
  6183.  
  6184. option_o:
  6185.         moveq    #$20,d0
  6186.         or.b    (a2)+,d0        ;nulîƒì╕é═òsùv...
  6187.  
  6188.         lea    (option_o_list,pc),a0
  6189.         moveq    #3,d1
  6190. @@:
  6191.         cmp.b    (a0)+,d0
  6192.         dbeq    d1,@b
  6193.         bne    @f
  6194.  
  6195.         move.b    d1,(option_o_flag-option_flag,a6)
  6196. @@:        bra    option_end
  6197.  
  6198. option_c:
  6199.         bsr    toggle_buffering_mode
  6200.         bra    next_option
  6201.  
  6202. option_f:
  6203.         moveq    #OPT_F_bit,d2
  6204.         bsr    get_value
  6205.         bmi    option_fj_chg        -f
  6206.         tst    d1
  6207.         beq    option_fj_chg        -f0
  6208.  
  6209.         move.b    d1,(option_f_col-option_flag,a6)    ò\ĪÉFÄwÆΦ
  6210.         bra    @f
  6211.  
  6212. option_j:
  6213.         moveq    #OPT_J_bit,d2
  6214. option_fj_chg:
  6215.         bchg    d2,(a6)
  6216. @@:        bra    next_option
  6217.  
  6218. option_b:
  6219.         cmpi.b    #'#',(a2)
  6220.         sne    d2            d2.b==0é┼Åëè·ë╗é╖éΘ
  6221.         bne    @f
  6222.         addq.l    #1,a2
  6223. @@:
  6224.         bsr    get_value
  6225.         bmi    @f            ;û│ÄwÆΦ
  6226.         move.l    (buffer_size,pc),d0
  6227. @@:
  6228.         bne    next_option        ;ÄwÆΦì╧é▌
  6229.  
  6230.         mulu    #1024,d1        KBÆPê╩
  6231.         movea.l    ($1c00),a0        âüâCâôâüâéâèûûö÷
  6232.         suba.l    d1,a0
  6233.         bcs    @f
  6234.         lea    (a0),a1
  6235.         suba.l    (DEVIO_ENDADR,a5),a1
  6236.         bcs    @f
  6237.         cmpa.l    #$80000,a1
  6238. @@:
  6239.         scs    (no_mem_flag-option_flag,a6)
  6240.         bcs    @f            512KB Äcéτé╚éóé╚éτû│Äï
  6241.         moveq    #32,d0            è╟ù¥Åεò±é╠ò¬âoâbâtâ@É│ûíé═Å¡é╚é¡é╚éΘ
  6242.         sub.l    d0,d1
  6243.         bmi    @f            -b0 é╠ÅΩìç
  6244.  
  6245.         move.l    d1,(buffer_size-option_flag,a6)
  6246.         move.l    a0,($1c00)        âüâéâèé≡ìφéΘ
  6247.         move.l    a0,(backscroll_buf_adr-option_flag,a6)
  6248.  
  6249.         SFTbtst    SFT_SHIFT
  6250.         bne    buffer_clear_start
  6251.         tst.b    d2            -b#n
  6252.         beq    buffer_clear_start
  6253.         cmpi.l    #'hmk*',(a0)+
  6254.         beq    @f            öjë≤é│éΩé─éóé╚éóé╚éτÅëè·ë╗é╡é╚éó
  6255. buffer_clear_start:
  6256.         bsr    initialize_backscroll_buffer
  6257.         bset    #BUFINIT_bit,(bitflag-option_flag,a6)
  6258. @@:
  6259.         move.l    (buffer_now,a0),(line_buf-option_flag,a6)
  6260.         bra    next_option
  6261.  
  6262. option_k:
  6263.         bsr    get_value
  6264.         bmi    @f
  6265.         cmpa.l    (DEVIO_ENDADR,a5),a3
  6266.         bne    @f            ò╧ìXì╧é▌
  6267.         subq    #1,d1
  6268.         bls    @f            1ê╚ë║
  6269.  
  6270.         mulu    #1024,d1
  6271.         movea.l    ($1c00),a0
  6272.         suba.l    d1,a0
  6273.         suba.l    a3,a0            a3 = âfâoâCâXâhâëâCâoé╠ûûö÷
  6274.         cmpa.l    #$80000,a0
  6275.         bcs    @f
  6276.         add.l    d1,(pastbuf_size-option_flag,a6)
  6277.         add.l    d1,(DEVIO_ENDADR,a5)
  6278. @@:
  6279.         bra    next_option
  6280.  
  6281. option_w:
  6282.         bsr    get_value        èJÄnê╩Æu
  6283.         bmi    option_w_end
  6284.  
  6285.         move    d1,d2
  6286.         moveq    #0,d1
  6287.         cmpi.b    #',',(a2)
  6288.         bne    @f
  6289.  
  6290.         addq.l    #1,a2
  6291.         bsr    get_value        ìsÉö
  6292.         bmi    option_w_end
  6293. @@:
  6294.         cmpi    #4,d2
  6295.         bcs    option_w_end        4 ê╚ë║é═û│Äï
  6296.         move    d2,d0
  6297.         cmpi    #28,d0
  6298.         bcc    option_w_end        28 ê╚Åπé═û│Äï
  6299.  
  6300.         move    d2,(window_line-option_flag,a6)
  6301.         bra    @f
  6302. option_w_loop:
  6303.         move    (down_line,pc),d0
  6304.         add    (window_line,pc),d0
  6305.         cmpi    #28,d0
  6306.         bcc    option_w_end        êΩö╘ë║é▄é┼ìsé┴é╜ÅΩìç
  6307.  
  6308.         lea    (text_address,pc),a0
  6309.         addi.l    #$800,(a0)+
  6310.         addi    #$404,(a0)+
  6311.         addq    #1,(a0)
  6312. @@:
  6313.         dbra    d1,option_w_loop
  6314. option_w_end:
  6315.         bra    next_option
  6316.  
  6317. print_hexadecimal:
  6318.         lea    (str_buf,pc),a1
  6319. print_hex_loop:
  6320.         moveq    #$f,d0
  6321.         and    d1,d0
  6322.         addi    #'0',d0
  6323.         cmpi    #'9',d0
  6324.         bls    @f
  6325.         .ifdef    __UPPER
  6326.         addq    #'A'-('9'+1),d0
  6327.         .else
  6328.         addi    #'a'-('9'+1),d0
  6329.         .endif
  6330. @@:
  6331.         move.b    d0,-(a1)
  6332.         lsr.l    #4,d1
  6333.         bne    print_hex_loop
  6334.         jmp    (a3)            print
  6335.  
  6336. print_kiro_decimal:
  6337.         lea    (str_buf,pc),a1
  6338.         moveq    #10,d0
  6339.         lsr.l    d0,d1            KBÆPê╩é╔é╖éΘ
  6340. @@:
  6341.         divu    d0,d1
  6342.         swap    d1
  6343.         addi    #'0',d1
  6344.         move.b    d1,-(a1)
  6345.         clr    d1
  6346.         swap    d1
  6347.         bne    @b
  6348.         jmp    (a3)            print
  6349.  
  6350. * ÉöÆlÄ√ô╛
  6351. get_value:
  6352.         bsr    is_number
  6353.         move    d0,d1
  6354.         bpl    @f
  6355. *        moveq    #-1,d0
  6356.         rts
  6357. get_value_loop:
  6358.         mulu    #10,d1
  6359.         add    d0,d1
  6360. @@:
  6361.         bsr    is_number
  6362.         bpl    get_value_loop
  6363.         moveq    #0,d0
  6364.         rts
  6365.  
  6366. is_number:
  6367.         move.b    (a2)+,d0
  6368.         subi.b    #'0',d0
  6369.         cmpi.b    #9,d0
  6370.         bhi    @f
  6371.  
  6372.         ext    d0
  6373.         rts
  6374. @@:
  6375.         subq.l    #1,a2
  6376.         moveq    #-1,d0
  6377.         rts
  6378.  
  6379. command_exec:
  6380.         DOS    _EXIT
  6381.  
  6382. * Data Section -------------------------------- *
  6383.  
  6384.         .data                xcon_inité⌐éτé≡ì∞ï╞ù╠êµé╔Ägùpé╖éΘê╫üA
  6385.         .even                é╚éΘé╫é¡Åπé╠ò√é╔öjë≤é│éΩé─éαéóéóéαé╠é≡Æué¡
  6386. title_mes:
  6387.         .dc.b    CR,LF
  6388.         .dc.b    'Console driver version ',VERSION
  6389.         .ifdef    __EMACS
  6390.             .dc.b    '[em]'
  6391.         .endif
  6392.         .dc.b    ' / Copyright 1990 ö┌ûφî─üÖ, ',DATE,' ',AUTHOR,'.',CR,LF
  6393. str_buf:    .dc.b    0
  6394. xcon_filename:    .dc.b    'XCON',0
  6395.  
  6396. double_include_err_mes:
  6397.         .dc.b    'âhâëâCâoé═è∙é╔ôoÿ^é│éΩé─éóé▄é╖.',CR,LF,0
  6398. no_buf_err_mes:
  6399.         .dc.b    'âoâbâNâXâNâìü[âïâoâbâtâ@é╠ùeù╩é¬ÄwÆΦé│éΩé─éóé▄é╣é±.',CR,LF,0
  6400. no_mem_err_mes:
  6401.         .dc.b    'âüâéâèé¬æ½éΦé▄é╣é±.',CR,LF,0
  6402.  
  6403. initmes1:    .dc.b    'âoâbâNâXâNâìü[âïâoâbâtâ@($',0
  6404. initmes2:    .dc.b    'KB)é═Åëè·ë╗é╡é▄é╣é±.',CR,LF,0
  6405. initmes3:    .dc.b    'KB)é≡Åëè·ë╗é╡é▄é╡é╜.',CR,LF,0
  6406. initmes4:    .dc.b    'âLü[â{ü[âhâoâbâtâ@($',0
  6407. initmes5:    .dc.b    'KB)é≡èmò█é╡é▄é╡é╜.',CR,LF,0
  6408.  
  6409. option_o_list:    .dc.b    '21cs'
  6410. option_n_list:    .dc.b    'bcet'
  6411.  
  6412. * é▒é▒éµéΦÅπæñé═öjë≤ë┬ö\é╚ò╢ÄÜù± -------------- *
  6413.  
  6414. condrv_pal:    .dc.b    'CONDRV.PAL',0
  6415. env_home:    .dc.b    'HOME',0
  6416.  
  6417. search_forward_mes:
  6418.         .dc.b    ' æOò√îⁿîƒì⌡ò╢ÄÜù±:',0
  6419. search_backward_mes:
  6420.         .dc.b    ' îπò√îⁿîƒì⌡ò╢ÄÜù±:',0
  6421. searching_mes:
  6422.         .dc.b    'îƒì⌡Æå',0
  6423. not_found_mes:
  6424.         .dc.b    'î⌐é┬é⌐éΦé▄é╣é±',0
  6425. isearch_mes_1:
  6426.         .dc.b    'isearch [',0
  6427. isearch_mes_2:
  6428.         .dc.b    ']:',0
  6429.  
  6430.  
  6431. write_file_prompt:
  6432.         .dc.b    ' âtâ@âCâïÅæé½Åoé╡:',0
  6433. insert_file_prompt:
  6434.         .dc.b    ' âtâ@âCâïô╟é▌ì₧é▌:',0
  6435. disk_notready_mes:
  6436.         .dc.b    'âfâBâXâNé¬ûóæ}ôⁿé┼é╖',0
  6437.         .even
  6438. file_io_disable_mes:
  6439.         .dc    0
  6440.         .dc.b    'ù═òsë┬ö\é╚âfâoâCâXé┼é╖',0
  6441.  
  6442. fopen_err_mes_tbl:
  6443.         .dc.b    $fe,'âtâ@âCâïé¬æ╢ì▌é╡é▄é╣é±',0
  6444.         .dc.b    $fd,'âfâBâîâNâgâèé¬æ╢ì▌é╡é▄é╣é±',0
  6445.         .dc.b    $fc,'FCB é¬òsæ½é╡é─éóé▄é╖',0
  6446.         .dc.b    $fb,'âfâBâîâNâgâè/â{âèâàü[âÇâëâxâïé═âIü[âvâôÅoùêé▄é╣é±',0
  6447.         .dc.b    $f3,'âtâ@âCâïû╝é¬ê┘Åφé┼é╖',0
  6448.         .dc.b    $f1,'âhâëâCâuû╝é¬ê┘Åφé┼é╖',0
  6449.         .dc.b    $ed,'Åæé½ì₧é▌òsë┬ö\é╚âtâ@âCâïé┼é╖',0
  6450.         .dc.b    $e9,'âfâBâXâNé╠ùeù╩é¬òsæ½é╡é─éóé▄é╖',0
  6451.         .dc.b    $e8,'âfâBâîâNâgâèé╔ï≤é½é¬éáéΦé▄é╣é±',0
  6452.         .dc.b    $df,'âtâ@âCâïé¬âìâbâNé│éΩé─éóé▄é╖',0
  6453.         .dc.b    $dd,'âVâôâ{âèâbâNâèâôâNé╠âlâXâgé¬É[é╖é¼é▄é╖',0
  6454. fopen_err_mes:    .dc.b    $00,'âtâ@âCâïé¬âIü[âvâôÅoùêé▄é╣é±(é╗é╠æ╝é╠âGâëü[)',0
  6455.  
  6456. toggle_buffer_mode_mes:
  6457.         .dc.b    'É▌ÆΦò╧ìX(B:BSÅêù¥ C:ɺîΣïLìåìφÅ£ E:ESCìφÅ£ I:TABò╧è╖ T:Tabò\Ī R:ëⁿìsò\Ī X:îƒì⌡âéü[âh):',0
  6458. toggle_text_mode_mes:
  6459.         .dc.b    'É▌ÆΦò╧ìX(1:â}âEâXɺîΣ 2:âeâLâXâgò█æ╢ 3:âeâLâXâgÄgùpÅ≤ï╡û│Äï 4:âJü[â\âïɺîΣù}ɺ):',0
  6460. set_mark_mes:
  6461.         .dc.b    'set-mark.',0
  6462.  
  6463.  
  6464.         .ifndef    __EMACS
  6465. define_label_mes:
  6466.         .dc.b    'âëâxâïÆΦï`(',0
  6467. jump_label_mes:
  6468.         .dc.b    'âëâxâïâWâââôâv(',0
  6469. label_mes_end:
  6470.         .dc.b    '):',0
  6471.         .endif
  6472.  
  6473.         .ifdef    __EMACS
  6474. no_mark_err_mes:
  6475.         .dc.b    'â}ü[âNé¬É▌ÆΦé│éΩé─éóé▄é╣é±',0
  6476.  
  6477. prefix_meta_mes:    .dc.b    'Meta',0
  6478. prefix_ctrlx_mes:    .dc.b    'C-x',0
  6479.  
  6480. ise_fnc_tbl:
  6481.         .dc.b    21,$ff,1,0        ROLL UP
  6482.         .dc.b    22,$ff,2,0        ROLL DOWN
  6483.         .dc.b    24,$ff,3,0        DEL
  6484.         .dc.b    25,$ff,4,0        ü¬
  6485.         .dc.b    26,$ff,5,0        ü⌐
  6486.         .dc.b    27,$ff,6,0        ü¿
  6487.         .dc.b    28,$ff,7,0        ü½
  6488.         .dc.b    29,$ff,8,0        CLR
  6489.         .dc.b    30,$ff,9,0        HELP
  6490.         .dc.b    31,$ff,10,0        HOME
  6491.         .dc.b    32,$ff,11,0        UNDO
  6492.         .dc.b    0
  6493.  
  6494.         .endif
  6495.  
  6496. ctrl2scan_table:
  6497.     .irpc    %a,üùABCDEFGHIJKLMNOPQRSTUVWXYZümü_ünüO_ü@üIühüöüÉüôüòüfüiüjüûü{üCü|üDü^0123456789üFüGüâüüüäüH
  6498.         .dc.b    KEY_%a
  6499.     .endm
  6500.  
  6501.  
  6502. * ÉöÆlâfü[â^ôÖ -------------------------------- *
  6503.  
  6504.         .quad
  6505. text_address:    .dc.l    $e60400            ;âoâbâNâXâNâìü[âïâEâBâôâhâEé╠ì╢ÅπâAâhâîâX
  6506. text_ras_no:    .dc    $202            ;âëâXâ^ö╘ìå
  6507. down_line:    .dc    0            ;ë║é╔ê┌ô«é╡é╜ìsÉö
  6508. window_line:    .dc    28            ;âoâbâNâXâNâìü[âïâEâBâôâhâEé╠ìsÉö-1
  6509.  
  6510. putbuf_column:    .dc.b    WIDTH            ;âoâbâtâ@Åæì₧îàÉö
  6511.  
  6512. default_past_header:
  6513.         .dc.b    '>'
  6514. option_f_col:    .dc.b    3            ;IOCS _B_PUTMES é╠ÉF
  6515. option_o_flag:    .dc.b    2
  6516.  
  6517.  
  6518. * â^âu/ëⁿìsïLìåâtâHâôâg ----------------------- *
  6519.  
  6520.     .ifdef    __EM_FONT_TAB
  6521.  
  6522. * TAB èJÄnâtâHâôâg
  6523. tab_font_1:
  6524.         .dc.b    %00000000        ;MicroEMACS âtâHâôâg
  6525.         .dc.b    %00000000
  6526.         .dc.b    %00000000
  6527.         .dc.b    %00000000
  6528.         .dc.b    %00000000
  6529.         .dc.b    %00000000
  6530.         .dc.b    %00000000
  6531.         .dc.b    %00011000
  6532.         .dc.b    %00010100
  6533.         .dc.b    %00011000
  6534. **        .dc.b    %00000000
  6535. **        .dc.b    %00000000
  6536. **        .dc.b    %00000000
  6537. **        .dc.b    %00000000
  6538. **        .dc.b    %00000000
  6539. **        .dc.b    %00000000
  6540. * TAB âtâHâôâg
  6541. tab_font_2:
  6542.         .dc.b    %00000000        ;MicroEMACS âtâHâôâg
  6543.         .dc.b    %00000000
  6544.         .dc.b    %00000000
  6545.         .dc.b    %00000000
  6546.         .dc.b    %00000000
  6547.         .dc.b    %00000000
  6548.         .dc.b    %00000000
  6549.         .dc.b    %00000000
  6550.         .dc.b    %00000000
  6551.         .dc.b    %00011000
  6552. **        .dc.b    %00000000
  6553. **        .dc.b    %00000000
  6554. **        .dc.b    %00000000
  6555. **        .dc.b    %00000000
  6556. **        .dc.b    %00000000
  6557. **        .dc.b    %00000000
  6558.     .else
  6559. tab_font_1:
  6560.         .dc.b    %00000000        ;âIâèâWâiâï âtâHâôâg
  6561.         .dc.b    %00000000
  6562.         .dc.b    %00000000
  6563.         .dc.b    %00000000
  6564.         .dc.b    %00000000
  6565.         .dc.b    %00000000
  6566.         .dc.b    %00000000
  6567.         .dc.b    %00000000
  6568.         .dc.b    %00100000
  6569.         .dc.b    %00110000
  6570.         .dc.b    %00111000
  6571.         .dc.b    %00111100
  6572. **        .dc.b    %00000000
  6573. **        .dc.b    %00000000
  6574. **        .dc.b    %00000000
  6575. **        .dc.b    %00000000
  6576. tab_font_2:
  6577.         .dc.b    %00000000        ;âIâèâWâiâï âtâHâôâg
  6578.         .dc.b    %00000000
  6579.         .dc.b    %00000000
  6580.         .dc.b    %00000000
  6581.         .dc.b    %00000000
  6582.         .dc.b    %00000000
  6583.         .dc.b    %00000000
  6584.         .dc.b    %00000000
  6585.         .dc.b    %00000000
  6586.         .dc.b    %00000000
  6587.         .dc.b    %00000000
  6588.         .dc.b    %00010000
  6589. **        .dc.b    %00000000
  6590. **        .dc.b    %00000000
  6591. **        .dc.b    %00000000
  6592. **        .dc.b    %00000000
  6593.     .endif
  6594.  
  6595.     .ifdef    __EM_FONT_CR
  6596. * ëⁿìsâtâHâôâg
  6597. cr_font:
  6598.         .dc.b    %00000000        ;MicroEMACS âtâHâôâg
  6599.         .dc.b    %00000000
  6600.         .dc.b    %00000000
  6601.         .dc.b    %00000000
  6602.         .dc.b    %00000000
  6603.         .dc.b    %00000000
  6604.         .dc.b    %00111100
  6605.         .dc.b    %00100100
  6606.         .dc.b    %00100100
  6607.         .dc.b    %00100111
  6608.         .dc.b    %00100010
  6609.         .dc.b    %00100100
  6610.         .dc.b    %00101000
  6611.         .dc.b    %00110000
  6612.         .dc.b    %00100000
  6613.         .dc.b    %00000000
  6614.     .else
  6615. cr_font:
  6616.         .dc.b    %00000000        ;âIâèâWâiâï âtâHâôâg
  6617.         .dc.b    %00000000
  6618.         .dc.b    %00000000
  6619.         .dc.b    %00000000
  6620.         .dc.b    %00000000
  6621.         .dc.b    %00000000
  6622.         .dc.b    %00000000
  6623.         .dc.b    %00000000
  6624.         .dc.b    %00111000
  6625.         .dc.b    %00111000
  6626.         .dc.b    %00111110
  6627.         .dc.b    %00111100
  6628.         .dc.b    %00111000
  6629.         .dc.b    %00110000
  6630.         .dc.b    %00000000
  6631.         .dc.b    %00000000
  6632.     .endif
  6633.  
  6634.  
  6635. * âwâïâv -------------------------------------- *
  6636.  
  6637.         .even
  6638. help_mes_top:
  6639.         .dc.b    0
  6640.         .ifdef    __EMACS
  6641.             .include    condrv_help_em.s
  6642.         .else
  6643.             .include    condrv_help.s
  6644.         .endif
  6645. help_mes_last_ofst:
  6646.         .dc.b    0            ì┼îπé╠ìsé╠Æ╖é│é═ 0 âoâCâg
  6647. help_mes_last_ptr:
  6648.         .dc.b    0            ï≤ìs
  6649. help_mes_end:
  6650. *        .dc.b    0            ì┼îπé╠ìsé╠Æ╖é│ é╗é╠éQ(é╚é¡é─éαò╜ïCé╛éδéñ...
  6651.  
  6652.         .quad
  6653. *        .dc.l    'hmk*'            ;Ä»ò╩Äq
  6654. help_buf_struct:
  6655.         .dc.l    help_mes_top        âoâbâtâ@ɵô¬
  6656.         .dc.l    help_mes_top        âèâôâOâoâbâtâ@é╠ɵô¬
  6657.         .dc.l    help_mes_last_ofst    î╗ì▌ìsé╠ɵô¬
  6658.         .dc.l    help_mes_last_ptr    Åæé½ì₧é▌â|âCâôâ^
  6659.         .dc.l    help_mes_end+1        âoâbâtâ@ûûö÷+1
  6660. *        .ds.l    2
  6661.  
  6662. HOOKTBL:    .macro    funcno,newadr
  6663.         .dc    BASE+.low.funcno*4,newadr-top_
  6664.         .endm
  6665.  
  6666. * âxâNâ^é≡ò╧ìXé╖éΘâèâXâg ---------------------- *
  6667. * Ägùpîπé═âìâôâOâÅü[âhé┼î│é╠âAâhâîâXé≡æ╥ö≡
  6668.         .quad
  6669. hook_table_top:
  6670.  
  6671. BASE:        .set    $400
  6672. b_keyinp_orig:    HOOKTBL    _B_KEYINP    ,iocs_b_keyinp
  6673. b_keysns_orig:    HOOKTBL    _B_KEYSNS    ,iocs_b_keysns
  6674. key_init_orig:    HOOKTBL    _KEY_INIT    ,iocs_key_init
  6675. b_putc_orig:    HOOKTBL    _B_PUTC        ,iocs_b_putc
  6676. b_print_orig:    HOOKTBL    _B_PRINT    ,iocs_b_print
  6677. txrascpy_orig:    HOOKTBL    _TXRASCPY    ,iocs_txrascpy
  6678.  
  6679. BASE:        .set    $1800
  6680. hendsp_orig:    HOOKTBL    _HENDSP        ,dos_hendsp
  6681. fnckey_orig:    HOOKTBL    _FNCKEY        ,dos_fnckey
  6682. conctrl_orig:    HOOKTBL    _CONCTRL    ,dos_conctrl
  6683.  
  6684.         .dc    0        * end of table
  6685.  
  6686. * Block Storage Section ----------------------- *
  6687.  
  6688.         .bss
  6689.         .quad
  6690.  
  6691.         .ifndef    __EMACS
  6692. label_buffer:    .ds.l    26
  6693.         .endif
  6694. xcon_req_adr:    .ds.l    1
  6695.         .ifdef    __XCONC
  6696. xconc_req_adr:    .ds.l    1
  6697.         .endif
  6698.  
  6699. fepctrl_lock:    .ds.l    1
  6700. fepctrl_mode:    .ds.l    1
  6701. last_time:    .ds.l    1
  6702. mes_end_adr:    .ds.l    1
  6703. io_buffer:
  6704. fnckey_buf:
  6705. line_store_buf:    .ds.b    TEXTSAVESIZE    ìsôⁿù═Ä₧é╠î│é╠âeâLâXâgò█æ╢âoâbâtâ@
  6706. case_table:    .ds.b    256        ö╝èpżò╢ÄÜ->æσò╢ÄÜò╧è╖âeü[âuâï
  6707. search_string:    .ds.b    GETSMAX+1    æσò╢ÄÜë╗é╡é╜îƒì⌡ò╢ÄÜù±(2ò╢ÄÜû┌ê╚ì~)
  6708. ctype_table:    .ds.b    256
  6709.  
  6710. sys_stat_prtbuf:
  6711.         .ds.b    1            '!'ò\Īùpâoâbâtâ@
  6712. past_header:
  6713.         .ds.b    1
  6714. search_string_buf:
  6715.         .ds.b    GETSMAX+1        îƒì⌡ò╢ÄÜù±âoâbâtâ@
  6716. isearch_string_buf:
  6717.         .ds.b    GETSMAX+1
  6718.  
  6719.         .even
  6720. cursor_blink_count:
  6721.         .ds.b    1
  6722. cursor_blink_state:
  6723.         .ds.b    1
  6724. iocs_curflg:
  6725.         .ds.b    2            IOCSworkæ╥ö≡buffer($992-$993:_OS_CURON/OFF)
  6726. bitflag:
  6727.         .ds.b    1            èeÄφâtâëâO
  6728. HELPMODE_bit:    .equ    7 : âwâïâvâéü[âh
  6729. AFTERCR_bit:    .equ    6 : ëⁿìsÆ╝îπ:âyü[âXâgâwâbâ_Åoù═ùp
  6730. FEPOPEN_bit:    .equ    5 : è┐ÄÜò╧è╖æïâIü[âvâôÆå
  6731. **GETSS_bit:    .equ    4 : êΩìsôⁿù═Æå
  6732. ISEARCH_bit:    .equ    4 : Éïăîƒì⌡é┼êΩò╢ÄÜôⁿù═Æ╝îπ(C-s,C-rôÖé╠ăîƒì⌡Ä₧é═0é╔é╚éΘ)
  6733. NO_FUNC_bit:    .equ    3 : âtâ@âôâNâVâçâôâLü["ö±"ò\ĪÆå("!>"ò\Īòsë┬ö\âtâëâO)
  6734. SUSPEND_bit:    .equ    2 : âoâbâNâXâNâìü[âïëµû╩é≡èJéóé╜é▄é▄ÅIù╣
  6735. BUFINIT_bit:    .equ    1 : âoâbâtâ@Åëè·ë╗ì╧é▌:ægé▌ì₧é▌Ä₧é╠"ü`é≡Åëè·ë╗é╡é▄é╡é╜"ò\Īùp
  6736. BACKSCR_bit:    .equ    0 : âoâbâNâXâNâìü[âïâéü[âh
  6737. IS_HELPMODE:    .equ    %1000_0000
  6738. IS_AFTERCR:    .equ    %0100_0000
  6739. IS_FEPOPEN:    .equ    %0010_0000
  6740. **IS_GETSS:    .equ    %0001_0000
  6741. IS_ISEARCH:    .equ    %0001_0000
  6742. IS_NO_FUNC:    .equ    %0000_1000
  6743. IS_SUSPEND:    .equ    %0000_0100
  6744. IS_BUFINIT:    .equ    %0000_0010
  6745. IS_BACKSCR:    .equ    %0000_0001
  6746.  
  6747.         .quad
  6748. text_pal_buff:    .ds    16            âeâLâXâgâpâîâbâgæ╥ö≡âoâbâtâ@
  6749.  
  6750. vdisp_int_adr:    .ds.l    1            ÉéÆ╝ô»è·èäéΦì₧é▌é┼âtâbâNé╖éΘâAâhâîâX
  6751. ras_int_adr:    .ds.l    1            âëâXâ^èäéΦì₧é▌é┼âtâbâNé╖éΘâAâhâîâX
  6752.  
  6753. line_buf:    .ds.l    29            ò\ĪÆåé╠ìsé╠âoâbâtâ@âAâhâîâX
  6754. buffer_size:    .ds.l    1            âoâbâtâ@ùeù╩-32bytes(è╟ù¥Åεò±é╠ò¬)
  6755. ;æ}ôⁿï╓Ä~
  6756. mark_char_adr:    .ds.l    1            â}ü[âNèJÄnê╩Æu
  6757. mark_line_adr:    .ds.l    1            â}ü[âNèJÄnìsé╠âoâbâtâ@âAâhâîâX
  6758. ;æ}ôⁿï╓Ä~
  6759. cursorX:    .ds    1            âoâbâNâìâOé╠âJü[â\âïéwì└òW
  6760. cursorXbyte:    .ds    1            âoâbâNâìâOé╠ìsé╠ì╢Æ[é⌐éτé╠âoâCâgÉö
  6761. cursorY:    .ds    1            âoâbâNâìâOé╠âJü[â\âïéxì└òW
  6762. ;æ}ôⁿï╓Ä~
  6763. curx_save:    .ds    1            ;ò█æ╢é╡é╜âJü[â\âïéwì└òW
  6764.  
  6765. * îƒì⌡ɼî≈Ä₧é╔âZâbâgé│éΩéΘ. Ä╕ösé╡é╜éτsearch_char_adré¬âNâèâAé│éΩéΘ.
  6766. search_char_adr:.ds.l    1            ;âJü[â\âïê╩Æué╠âoâbâtâ@âAâhâîâX
  6767. search_x:    .ds    1            ;âJü[â\âïéwì└òW
  6768. search_xbyte:    .ds    1            ;ìsé╠ì╢Æ[é⌐éτé╠âoâCâgÉö
  6769.  
  6770. last_line_ptr:    .ds.l    1            ;&line_buf[last_line]
  6771. last_line_adr:    .ds.l    1            ; line_buf[last_line]
  6772. last_line_byte:    .ds.b    1            ;*line_buf[last_line]
  6773.         .even
  6774.  
  6775. xcon_output_hb:    .ds    1            XCON é╓é╠Åoù═:2âoâCâgò╢ÄÜé╠Åπê╩(ë║ê╩âoâCâgé═û│Äïé│éΩéΘ)
  6776.  
  6777. bufwrite_last:    .ds    1            æOë±é╠Åæé½ì₧é▌ò╢ÄÜ
  6778. bufmod_stack:    .dc.l    1
  6779. bufmod_height:    .ds.b    1
  6780. no_mem_flag:
  6781. gm_automask:    .ds.b    1            ;ïûë┬ü¿ï╓Ä~é╔é╡é─éóéΘé╚éτ$ff
  6782. gm_maskflag:    .ds.b    1
  6783. ms_ctrl_flag:    .ds.b    1            â}âEâXɺîΣé≡é╡é╜Ä₧é╔-1
  6784. skeymod_save:    .ds.b    1            ê╚æOé╠â\âtâgâLü[â{ü[âhÅ≤æ╘
  6785. mscur_on_flag:    .ds.b    1            â}âEâXâJü[â\âïé≡Å┴ïÄé╡é╜Ä₧-1(îπé┼ò\Īé╖éΘ)
  6786. sleep_flag:    .ds.b    1
  6787. curx_save_flag:    .ds.b    1            ;Æ╝îπé╔âJü[â\âïê╩Æué≡ò█æ╢é╡é╚éó
  6788.  
  6789.         .ifdef    __EMACS
  6790. prefix_flag:    .ds.b    1
  6791. isearch_flag:    .ds.b    1
  6792.         .else
  6793. ins_clr_flag:    .ds.b    1
  6794.         .endif
  6795.  
  6796. option_m_flag:    .ds.b    1            ;bit3=1:âJü[â\âïɺîΣé╡é╚éó
  6797.                         ;bit2=1:TUSEMDû│Äï
  6798.                         ;bit1=1:Plane2/3ò█æ╢
  6799.                         ;bit0=1:MouseɺîΣ
  6800. option_p_flag:    .ds.b    1
  6801. option_r_flag:    .ds.b    1
  6802. option_t_flag:    .ds.b    1
  6803. option_x_flag:    .ds.b    1
  6804.  
  6805. option_nb_flag:    .ds.b    1
  6806. option_nc_flag:    .ds.b    1
  6807. option_ne_flag:    .ds.b    1
  6808. option_nt_flag:    .ds.b    1
  6809.  
  6810.         .quad
  6811. past_pointer:
  6812.         .ds.l    1        âyü[âXâgê╩Æu
  6813. backscroll_buf_adr:
  6814.         .ds.l    1        âoâbâtâ@ɵô¬âAâhâîâX
  6815. keypast_buffer:
  6816.         .ds.b    KBbuf_Default
  6817.  
  6818. end_:
  6819.         .end    command_exec
  6820.  
  6821. # î÷èJâÅü[âNé╠ì\æó
  6822.     .dc.b    -j(bit7),-f(bit0) âtâëâO
  6823.     .dc.b    0            .even???
  6824.     .dc    âyü[âXâgé╠âEâFâCâgâJâEâôâ^
  6825.     .dc        üV    Åëè·Æl
  6826.     .dc.l    âVâXâeâÇâRü[âïé╠âAâhâîâX
  6827.     .dc.b    0            ûóÄgùp???
  6828.     .dc.b    âEâBâôâhâEâLü[ù}ɺâtâëâO(-1:ù}ɺ)
  6829.     .dc.l    âoâbâtâ@Åæé½ì₧é▌âïü[â`âôé╠âAâhâîâX
  6830.     .dc.l    âLü[â{ü[âhâoâbâtâ@é╠Æ╖é│
  6831.     .dc.l    âLü[â{ü[âhâoâbâtâ@é╠ɵô¬âAâhâîâX
  6832.     .dc.l    Ä»ò╩Äq'hmk*'
  6833. * IOCS _KEY_INIT
  6834.  
  6835. # âLü[â{ü[âhâoâbâtâ@Äⁿò╙é╠ì\æó
  6836.     .dc.l    âyü[âXâgèJÄnâAâhâîâX
  6837.     .dc.l    âoâbâNâìâOâoâbâtâ@é╠âAâhâîâX
  6838. * âyü[âXâgâoâbâtâ@
  6839.  
  6840. * End of File --------------------------------- *
  6841.